LeetCode_6---ZigZag Conversion

来源:互联网 发布:商家给淘宝开具什么 编辑:程序博客网 时间:2024/06/05 00:55

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   NA P L S I I GY   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".
    题目翻译:根据ZIGZAG模式,翻译字符串,模型如下

    Zigzag:即循环对角线结构

    0   8   16   1  79  1517   2 6 10 14 18   35  1113  19   4   12   20   

    向下循环:nRows

    斜角线循环:nRows-2(减去首尾两个端点)


    Code:

    import java.util.HashMap;import java.util.Map;/** *  *//** * @author MohnSnow * @time 2015年6月1日 下午5:01:05 *  */public class LeetCode6 {/** * @param argsmengdx *            -fnst */public static String convert(String text, int nRows) {if (nRows == 1) {return text;}Map<Integer, StringBuilder> result = new HashMap<>(nRows);int eachRoundNumber = 2 * nRows - 2;//循环一组的下标长度for (int i = 1; i <= nRows; i++) {//map初始化result.put(i, new StringBuilder());}for (int i = 1; i <= text.length(); i++) {//模拟过程int key = i % eachRoundNumber;key = key == 0 ? eachRoundNumber : key;//巧妙使用三目运算符key = key <= nRows ? key : nRows - (key % nRows);result.get(key).append(text.charAt(i - 1));//字符起始位置为0}StringBuilder rest = new StringBuilder();//整合结果for (int i = 1; i <= nRows; i++) {rest.append(result.get(i));}return rest.toString();}public static String convert1(String text, int nRows) {if (nRows == 1) {return text;}Map<Integer, StringBuilder> result = new HashMap<>(nRows);int eachRoundNumber = 2 * nRows - 2;//循环一组的下标长度for (int i = 1; i <= nRows; i++) {//map初始化result.put(i, new StringBuilder());}for (int i = 1; i <= text.length(); i++) {//模拟过程int key = i % eachRoundNumber;if (key == 0) {result.get(2).append(text.charAt(i - 1));}else if (key <= nRows) {result.get(key).append(text.charAt(i - 1));} else {result.get(2 * nRows - key).append(text.charAt(i - 1));}}StringBuilder rest = new StringBuilder();//整合结果for (int i = 1; i <= nRows; i++) {rest.append(result.get(i));}return rest.toString();}public static void main(String[] args) {String s = "abcdefadfg";int a = 3;System.out.println(s + "2");System.out.println(convert(s, a));System.out.println(convert1(s, a));}}





    0 0
    原创粉丝点击