题目:
The string"PAYPALISHIRING"is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
P A H N A P L S I I G Y I RAnd then read line by line:"PAHNAPLSIIGYIR"
Write the code that will take a string and make this conversion given a number of rows:
string convert(string text, int nRows);convert("PAYPALISHIRING", 3)should return"PAHNAPLSIIGYIR".
思路:
1.按每行依次处理字符串
2.每行字符串间的间隔距离为:zigSpan + i(i为第i行, zigSpan = nRows*2-2)
3.当处理中间行数时,下一个字符串间隔距离为 zigSpan + j(当前位置)- 2*i;
代码:
public class Solution {
public String convert(String s, int nRows) {
if(s.length() < 3 || nRows < 2 || s.length() <= nRows)
return s;
StringBuilder ret = new StringBuilder();
int zigSpan = nRows*2 - 2;
for(int i = 0; i < nRows; i++)
{
for(int j = i; j < s.length(); j += zigSpan)
{
ret.append(s.charAt(j));
if(i != 0 && i != nRows-1 && j+zigSpan-i*2 < s.length())
{
ret.append(s.charAt(j+zigSpan-i*2));
}
}
}
return ret.toString();
}
}