https://leetcode-cn.com/problems/zigzag-conversion/
心得:
耗时2小时多
主要是找到每一个计算单元的起点,每个计算单元可以看成是一竖行+后面的斜坡。
竖行坐标 基点+行数
斜坡坐标 下一行基点-行数
由于第一行和最后一行比较特殊
第一行:下一行基点-行数 得到的是下一个单元要计算的点,因为行数是0
最后一行:下一行基点-行数 得到的是竖行的值,不是斜坡的值。
所以要第二个加字母的操作要排掉第一行和最后一行
class Solution {
public static String convert(String s, int numRows) {
if(numRows==1){
return s;
}
char[] sArray = s.toCharArray();
int cycleLength = 2 * (numRows - 1);
StringBuilder sb = new StringBuilder(s.length());
for (int i = 0; i < numRows; i++) {
int columnPoint = 0;
while (columnPoint < sArray.length) {
int currentPoint = columnPoint + i;
if (currentPoint < sArray.length) {
sb.append(sArray[currentPoint]);
}
currentPoint = columnPoint + cycleLength - i;
if (i != 0 && i != numRows-1 && currentPoint < sArray.length) {
sb.append(sArray[currentPoint]);
}
columnPoint += cycleLength;
}
}
return sb.toString();
}
}