LeetCode-ZigZag Conversion

错太多了,一开始找规律就找错了,想一行一行的取。后来想不用找规律了,直接每行开一个string,按曲线一个一个char赋值给对应的string。但是if else又写错了很多次。

1. string数组声明之后要对每个string初始化,否则会出现怪东西。

2.边界条件是nRows等于1的情况,以及s.length 小于nRows的情况。

3.找规律的话省空间,就是要计算好每行每两个数之间的gap,懒得写了。

public class Solution {
    public String convert(String s, int nRows) {
        if ( s == null)
            return null;
        String [] strs = new String [nRows];
        for ( int i = 0; i < nRows; i ++){
            strs[ i ] = "";
        }
        int row = 0;
        boolean down = true;
        if ( nRows == 1)
            return s;
        for ( int i = 0; i < s.length(); i ++ ){
            if ( down ){
                if(row < nRows){
                    strs[row] += s.charAt(i);
                    row ++;
                }
                if ( row == nRows) {
                    down = false;
                    row = nRows - 2;
                }
            }
            else{
                if ( row >= 0){
                    strs[row] += s.charAt(i);
                    row --;
                }
                if ( row < 0) {
                    down = true;
                    row = 1;
                }
            }
        }
        
        for ( int i = 1; i < nRows; i ++ ){
            if ( strs[i] != null)
                strs[0] += strs[i];
        }
        return strs[0];
        
    }
}
找规律的写法以后补上

你可能感兴趣的:(LeetCode-ZigZag Conversion)