题目:
我的解法:每一行找规律
思路:每一行先找到等间隔的点,然后再找每两个间隔点之间的点,每往下遍历一行,两个间隔点之间的点距右边的点差2n倍,按顺序将字符添加到一个list里,最后将整个list转为string。(注意需要多补全一个Z结构)
class Solution {
public String convert(String s, int numRows) {
if(s.length()==0 || numRows<1){
return "";
}
if(numRows==1){
return s;
}
int d = s.length();
List<Character> list = new ArrayList<Character>();
int distance = 2*numRows-2;
System.out.println(d);
System.out.println(distance);
int pad_d = d+distance;
for(int i=0; i<numRows;i++){
for(int j=0; j<pad_d; j++){
if(j%distance==i){
if(0<=j-2*i && j-2*i<d && 2*i!=0 && 2*i!=distance){
list.add(s.charAt(j-2*i));
}
if(0<=j && j<d){
list.add(s.charAt(j));
}
}
}
}
StringBuilder str = new StringBuilder();
for (Character c: list){
str.append(c);
}
return str.toString();
}
}
官方题解:
思路:通过判断第0行还是最后一行来改变向下还是向上遍历方向。
class Solution {
public String convert(String s, int numRows) {
if (numRows == 1) return s;
List<StringBuilder> rows = new ArrayList<>();
for (int i = 0; i < Math.min(numRows, s.length()); i++)
rows.add(new StringBuilder());
int curRow = 0;
boolean goingDown = false;
for (char c : s.toCharArray()) {
rows.get(curRow).append(c);
if (curRow == 0 || curRow == numRows - 1) goingDown = !goingDown;
curRow += goingDown ? 1 : -1;
}
StringBuilder ret = new StringBuilder();
for (StringBuilder row : rows) ret.append(row);
return ret.toString();
}
}
作者:LeetCode
链接:https://leetcode-cn.com/problems/zigzag-conversion/solution/z-zi-xing-bian-huan-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
思路:与我的解法类似
class Solution {
public String convert(String s, int numRows) {
if (numRows == 1) return s;
StringBuilder ret = new StringBuilder();
int n = s.length();
int cycleLen = 2 * numRows - 2;
for (int i = 0; i < numRows; i++) {
for (int j = 0; j + i < n; j += cycleLen) {
ret.append(s.charAt(j + i));
if (i != 0 && i != numRows - 1 && j + cycleLen - i < n)
ret.append(s.charAt(j + cycleLen - i));
}
}
return ret.toString();
}
}
作者:LeetCode
链接:https://leetcode-cn.com/problems/zigzag-conversion/solution/z-zi-xing-bian-huan-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。