问题来源:https://leetcode.com/problems/zigzag-conversion/
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
*
* <p>
* ClassName ZigZagConversion
* </p>
* <p>
* Description The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to
* display this pattern in a fixed font for better legibility)
*
* P A H N
* A P L S I I G
* Y I R
* And then read line by line: "PAHNAPLSIIGYIR" Write the code that will take a string and make this
* conversion given a number of rows:
*
* string convert(string text, int nRows); convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".
* </p>
*
* @author TKPad wangx89@126.com
* <p>
* Date 2015年3月26日 下午3:13:03
* </p>
* @version V1.0.0
*
*/
public class ZigZagConversion {
// 每一行用一个链表来存储
public String convert(String s, int nRows) {
if(1==nRows){
return s;
}
List<List<Character>> list = new ArrayList<List<Character>>();
char[] charArray = s.toCharArray();
for (int i = 0; i < nRows; i++) {
List<Character> list_i = new ArrayList<Character>();
list.add(list_i);
}
boolean flag = true;// true:表示count递增,false:表示count递减
int count = 0;// 小标,count可以决定从List集合中取出第几个List集合
for (int i = 0; i < charArray.length; i++) {
list.get(count).add(charArray[i]);
if (flag) {
count++;
} else {
count--;
}
if (count == 0 || count == nRows - 1) {
flag = !flag;// 将标识翻转
}
}
String res = "";
for (int i = 0; i < nRows; i++) {
Iterator<Character> iterator = list.get(i).iterator();
while (iterator.hasNext()) {
res += iterator.next();
}
}
return res;
}
// Wrong Answer
// Input : ABC,2
// Output : ABC
// Expected : ACB
// Wrong Answer
// Input: "ABCDE", 4
// Output: "ABECD"
// Expected: "ABCED"
public static void main(String[] args) {
String convert = new ZigZagConversion().convert("AB", 1);
System.out.println(convert);
}
}