ZigZag Conversion

来源:互联网 发布:狐狸那时已是猎人知乎 编辑:程序博客网 时间:2024/06/15 04:00

问题来源: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);    }}
0 0
原创粉丝点击