题目链接: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();
}
}