LeetCode 之 ZigZag Conversion

题目链接:ZigZag Conversion
题意是将字符串在一个给定数量的行上写成一个Z字形图案,并逐行读出来,比如:
字符串”PAYPALISHIRING”写成如下Z字形:
这里写图片描述
然后逐行读取为:”PAHNAPLSIIGYIR”。
这道题目就可以根据排列的形式,查找转换后对应位置上字母的规律。
这里写图片描述

根据对应位置规律,依次读出。
其中需要处理的特殊情况有:
1、当numRows==1时,转换前后字符串一致
2、当numRows>=字符串的长度时,转换前后字符串一致。
代码如下:

class Solution {
    public String convert(String s, int numRows) {
        int len = s.length();
        if(len<=numRows||numRows==1)
            return s;
        StringBuilder re = new StringBuilder();
        int j = 0, n = numRows ;
        for(int i=0;i<n;i++){
            j=0;
            while((n-1)*2*j-i<len){

                if(j==0)
                    re.append(s.charAt(i));//处理第一列的字符
                else 
                {
                //第一行和最后一行字符比中间的要少
                if(i!=0&&i!=n-1)//处理中间几列字符
                    re.append(s.charAt((n-1)*2*j-i));
                if((n-1)*2*j+i<len)//防止字符串溢出
                    re.append(s.charAt((n-1)*2*j+i));
                }
                j++;
        }
        }
        return re.toString();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值