ZigZag Conversion

来源:互联网 发布:邦奇-威尔斯 知乎 编辑:程序博客网 时间:2024/05/29 08:27

思路:将字符串改为数字,通过数字寻找规律,例如:
偶数行:
0       6        12
1    5 7     11
2  4   8 10
3       9

奇数行:
0    4   8
1 3 5 7
2    6

可以发现不管是奇数列还是偶数列,第一行和最后一行的数字后一个总是前一个的下标加上(numRows*2-2)
然后就是中间行数,可以发现偶数列依然符合上述规律,而奇数列为偶数列 - numRows * 2;

public class Solution {    public String convert(String s, int numRows) {        if(numRows <=1 || s.length()==0){            return s;        }        char[] array = s.toCharArray();        StringBuilder builder = new StringBuilder();        int index;        for(int i = 0; i < numRows; i++){            index = i;            //由于i有可能大于字符个数,即numRows有可能大于字符个数            for(int j = 0; j < array.length && i < array.length; j++ ){                //第一列的下标为行数递增                builder.append(array[index]);                //下面开始计算每一行的下一个字符的下标,                if(i == 0 || i == numRows-1){                    index += numRows * 2 - 2;                }else{                    //中间行数分别判断奇数列和偶数列                    if((j+1) % 2 != 0){                        index += (numRows*2 -2) - i*2;                    }else{                        index = index + i*2;                    }                }                //判断下标是否超过字符串的长度,以此条件来终止循环                if(index >= array.length){                    break;                }            }        }           return builder.toString();    }}
0 0
原创粉丝点击