LeetCode-6. ZigZag Conversion (JAVA)(之字形转换)

来源:互联网 发布:纸质书情怀 知乎 编辑:程序博客网 时间:2024/05/16 07:23

6. ZigZag Conversion

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".

/** * 将给定的字符串“ABCDEFGHIJK”按照给定的行数写成如下Z型: * A   E   I * B D F H J * C   G   K * 然后一行一行的读取:“AEIBDFHJCGK” * @author  */public String convert(String s, int numRows) {if (s == null || s.length() == 0 || numRows <= 1) {return s;}StringBuilder res = new StringBuilder(); /*         * a   e         * b d f         * c   g         * 从a到d为一个zig,size: 一个zig的大小         */int size = 2 * numRows - 2;for (int i = 0; i < numRows; i++) {// 外层循环i表示第几行(从0开始)// 内层序号j表示第几个zig(从0开始)for (int j = i; j < s.length(); j += size) {res.append(s.charAt(j));// zig的第一行和最后一行中间的行// 每一个zig有两个元素在同一行,如:b和d在同一行// 同一行中的两个元素之间的距离是:size-2*i(size一个zig的大小,i当前是第几行,从0开始)// 同一个zig中的第一个元素在s中的位置是j,第二个元素在s中的位置是:j+size-2*iif (i > 0 && i < numRows - 1) {int mid = j + size - 2 * i;if (mid < s.length()) {res.append(s.charAt(mid));}}}}return res.toString();}





0 0