1.题目
就是把一个字符串按照z自行排列,然后按照第一排第二排这样纸输出。
2.思路
刚开做的时候思路马上就出来的,但是自己还是做了一个半点,你个大彩笔。
把一个字符串按照z字形排列就发现,每2n-2个为一个周期,针对每一行遍历一次字符串,如果字符串的序列对周期取余正好等于列数就把这个字符加入兴建的StringBuilder中。第一列,最后一列和中间的不一样,中间的列要加转弯的部分,第一行和最后一行加入的话会造成重复。当n=1时奉为一种情况因为驱魔不能为0;n=2作为一种情况,否则会第二列不会加入。
3.结语
这些特殊情况其实都是提交错误之后才发现的,大彩笔呦。
贴图打卡
/*
class Solution {
public String convert(String s, int numRows) {
int l=s.length();
StringBuilder sb=new StringBuilder();
if(numRows>2) {
for (int i = 1; i < numRows + 1; i++) {
for (int i1 = 0; i1 < s.length(); i1++) {
if ((i1 + 1) % (2 * numRows - 2) == i && (i1 + 2 * (numRows - i) <= s.length() - 1) && (i != 1 && i != numRows)) {
sb.append(s.charAt(i1)).append(s.charAt(i1 + 2 * (numRows - i)));
}
else if ((i1 + 1) % (2 * numRows - 2) == i) {
sb.append(s.charAt(i1));
}
}
}
}
else if(numRows==2){
for (int i = 0; i < s.length(); i++) {
if ((i+1)%2==1){
sb.append(s.charAt(i));
}
}
for (int i = 0; i < s.length(); i++) {
if ((i+1)%2==0) {
sb.append(s.charAt(i));
}
}
}
else{
sb=new StringBuilder(s);
}
return new String(sb);
}
}
class A{
public static void main(String[] args) {
System.out.println(new Solution().convert("abcdefghijklmn",2));
}
}
*/