6. Z字形变换
真没招了,果然还是得仔细,一不小心就出错啊啊啊啊啊
我用的依旧是笨办法,直接就是弄一个二维字符数组,然后往里面一个一个塞,再遍历找出来
唯一要注意的就是没有值的ascll码为0, 值为‘\0’
先处理竖着的,再处理中间斜着的
题目:


题解:
class Solution {
public String convert(String s, int numRows) {
StringBuilder st = new StringBuilder();
if(numRows == 1) {
return s;
}
char[][] str = new char[numRows][s.length()];
int x = 0;
int y = 0;
int i = 0;
while(i<s.length()) {
while(x<=numRows-1&&i<s.length()) {
str[x][y] = s.charAt(i);
x++;
i++;
}
x-=2;
y++;
while(x>=1&&i<s.length()) {
str[x][y] = s.charAt(i);
x--;
y++;
i++;
}
x=0;
}
for(i=0;i<numRows;i++) {
for(int j=0;j<s.length();j++) {
if(str[i][j] != 0) {
st.append(str[i][j]);
}
}
}
return st.toString();
}
}
我觉得还是得看个题解,这个方法有点太笨了

class Solution {
public String convert(String s, int numRows) {
if(numRows < 2) {
return s;
}
List<StringBuilder> rows = new ArrayList<StringBuilder>();
for(int i=0;i<numRows;i++) {
rows.add(new StringBuilder());
}
// 定义行数,以及进行控制方向flag
int i=0, flag=-1;
// 遍历每一个字符
for(char c : s.toCharArray()) {
// 第i行的元素进行拼接
rows.get(i).append(c);
// 如果到了第一行或者最后一行就需要进行转向
// 这就是为什么一开始flag要设置成-1了
if(i == 0 || i == numRows-1) {
flag = -flag;
}
// 不断走
i+=flag;
}
StringBuilder res = new StringBuilder();
for(StringBuilder row:rows) {
res.append(row);
}
return res.toString();
}
}
7万+

被折叠的 条评论
为什么被折叠?



