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];
        
    }
}
找规律的写法以后补上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值