ZigZag Conversion 锯齿形转换字符串

思路:根据锯齿形状,可以得到结论

第i行的字符下标之间的距离是(nRows-1-i)*2和2*i,如下图所示:

0            6

1      5    7

2   4       8

3             9

根据这个规律,遍历每一行的元素,得到转换后的字符串。

注意两点:

1. 当s.length <= nRows || nRows == 1时,无需转换,直接返回,否则会超时。

2. 在遍历每一行时,每一行的while条件是下标值<s.length。根据上面的规律,在第一行和最后一行的间隔,都是(nRows-1-i)*2,应分类讨论。

public String convert(String s, int nRows) {
        int length = s.length();
    	if(length <= nRows || nRows == 1){
    		return s;
    	}
    	 String ret = "";
    	 int start = 0,interval1 = 0,interval2 = 0,time = 1;
    	 for(int i = 0;i<nRows;i++){
    	 	start = i;
    	 	time = 1;
    	 	interval1 = (nRows-1-i)*2;
    	 	interval2 = 2*i;
     		while(start < length){
     			ret += s.charAt(start);
     			if(interval1 == 0){//如果是最后一行
     			   start += interval2; 
     			}
     			if(interval2 == 0){//如果是第一行
     			    start += interval1; 
     			}
     			if(interval1 != 0 && interval2 != 0){//如果是其他行
         			if(time%2 == 1){
         				start += interval1;
         			}else{
         				start += interval2;
         			}
         			time++;
     			}
     		}
     	}
     	return ret;
    }


你可能感兴趣的:(ZigZag Conversion 锯齿形转换字符串)