问题描述
输入一个字符串和一个ZigZag编码行数,然后按照zigzag方式编码,最后返回编码后的字符串
ZIgZag编码
将输入的字符串按折线形式排列,然后按行读取。
eg:
Input: s = “PAYPALISHIRING”, numRows = 4
Output: “PINALSIGYAHRPI”
Explanation:
P | I | N | ||||
---|---|---|---|---|---|---|
A | L | S | I | G | ||
Y | A | H | R | |||
P | I |
分析
当输入字符串为S,行数为numRows时。观察规律,可发现每一个竖列字符坐标相差 2×numRows-2,除开始和最后一行,其余行在每列中有一个字符,该字符和其左边一竖列坐标相差 2×(numRows-i)-2,其中i代表行数。需要注意的是当numRows=1时,返回的就是S本身。
代码
public String convert(String s, int numRows) {
String zigzag=new String();
if(1==numRows)return s;
int n=2*numRows-2;
for(int i=0;i<numRows;i++){
int tn = 2*(numRows-i)-2;
int temp = i;
while(temp < s.length()){
zigzag += s.charAt(temp);
if(0 != i && i != numRows-1 && (temp+tn)<s.length()){
zigzag += s.charAt(temp+tn);
}
temp += n;
}
}
return zigzag;
}