class Solution {
public String convert(String S, int n) {
List<List<Character>> list = new ArrayList<>();
if(n==1||n>=S.length())return S;
for (int i = 0; i < n; i++) {
List<Character> list1 = new ArrayList<>();
list.add(list1);
}
boolean flag = true;
char[] t = S.toCharArray();
int i = 0;
for (char c:t
) {
if(flag){
list.get(i).add(c);
if(i==n-2){
i=n-1;
flag=false;
continue;
}
i++;
}else{
list.get(i).add(c);
if(i==1){
i=0;
flag=true;
continue;
}
i--;
}
}
StringBuffer res = new StringBuffer();
for (List<Character> l:list
) {
for (char c: l
) {
res.append(c);
}
}
return new String(res);
}
}
上边想到的第一个解法,下面的是借鉴的评论中的解法,只要找个例子,写出字符串中每一位的层数,就能找到规律。
class Solution {
public String convert(String S, int n) {
if(S.length()<=1||n<2)
return S;
StringBuffer res = new StringBuffer();
int cycle = n*2-2;
char[] t = S.toCharArray();
for(int i=0; i<n; i++){
for(int j = 0; j+i<t.length; j+=cycle){
res.append(t[i+j]);
if(i!=0&&i!=n-1&&j+cycle-i<t.length){
res.append(t[j+cycle-i]);
}
}
}
return res.toString();
}
}