字符串按照zigzag排列,最后按照行输出结果。
public class Solution {
public String convert(String s, int nRows) {
if(s==null || s.length()==0 || nRows <=1){
return s;
}
int n = s.length();
int circle = nRows+nRows-2;
ArrayList<LinkedList<Character>> record = new ArrayList<LinkedList<Character>>();
for(int i=0;i<nRows;i++){
record.add(new LinkedList<Character>());
}
boolean toEnd = false;
for(int i=0;i<n;i=i+circle){
int start =i;
for(int j=0;j<nRows;j++){
int curIndex = start+j;
if(curIndex>=n){
toEnd = true;
break;
}
record.get(j).add(s.charAt(curIndex));
}
if(toEnd){
break;
}
for(int j=0;j<nRows-2;j++){
int curIndex = start+nRows+j;
if(curIndex>=n){
toEnd = true;
break;
}
record.get(nRows-2-j).add(s.charAt(curIndex));
}
}
StringBuffer sb = new StringBuffer();
for(int i=0;i<nRows;i++){
LinkedList<Character> curl = record.get(i);
for(char c:curl){
sb.append(c);
}
}
return new String(sb);
}
}
1 按照题目存放的顺序来放,每2*nRow-2一个循环。
2 我用了一个ArrayList 来存放每行,每个ArrayList都对应LinkedList。其实可以用StringBuffer[]来做。
3 输出的时候从头到尾输出即可。
4 难点在于corner case