ZigZag Conversion

思路:将字符串改为数字,通过数字寻找规律,例如:
偶数行:
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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值