题目:
答案:
对于所有整数 k,
1.行0中的字符位于索引k(2⋅numRows−2) 处;
2.行numRows−1 中的字符位于索引k(2⋅numRows−2)+numRows−1 处;
3.内部的行i中的字符位于索引k(2⋅numRows−2)+i 以及(k+1)(2⋅numRows−2)−i 处;
class Solution {
public String convert(String s, int numRows) {
int n = s.length();
int i,j;
StringBuffer sBuffer = new StringBuffer();
int cirlen = 2*numRows-2;
if(numRows == 1) return s;//只有一行时返回自身
for(i=0;i<numRows;i++)
{
for(j=0;j+i<n;j=j+cirlen) //判断是否存在只需判断是否超出字符串长度即可
{
sBuffer.append(s.charAt(i+j));
if(i!=0 && i!=(numRows-1) && j+cirlen-i<n)
sBuffer.append(s.charAt(j+cirlen-i));
}
}
return sBuffer.toString();
}
}
需要注意的地方:
- 当对字符串修改时,需要使用StringBuffer类
- 表述某一位置或判断该位置是否含有需要操作的对象时,要寻找规律并采用简便的方法