前言:
现在我们对“z变换是什么”都比较关怀,看官们都需要知道一些“z变换是什么”的相关内容。那么小编同时在网络上汇集了一些对于“z变换是什么””的相关内容,希望兄弟们能喜欢,大家一起来学习一下吧!将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:
P A H NA P L S I I GY I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。
请你实现这个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
示例 1:
输入:s = "PAYPALISHIRING", numRows = 3输出:"PAHNAPLSIIGYIR"
示例 2:
输入:s = "PAYPALISHIRING", numRows = 4输出:"PINALSIGYAHRPI"解释:P I NA L S I GY A H RP I
示例 3:
输入:s = "A", numRows = 1输出:"A"
提示:
1 <= s.length <= 1000s 由英文字母(小写和大写)、',' 和 '.' 组成1 <= numRows <= 1000
package leetcode;public class ConvertZ_6 { // 压缩矩阵 public String convert1(String s, int numRows) { if (numRows <= 1 || numRows >= s.length()) { return s; } // char[] chars = s.toCharArray(); int width = 2 * numRows - 2; StringBuffer[] listBuffer = new StringBuffer[numRows]; for (int i = 0; i < numRows; i++) { listBuffer[i] = new StringBuffer(); } int bufferIndex = 0; for (int i = 0; i < s.length(); i++) { listBuffer[bufferIndex].append(s.charAt(i)); if (i % width >= numRows - 1) { bufferIndex--; } else { bufferIndex++; } } StringBuffer stringBuffer = new StringBuffer(); for (int i = 0; i < numRows; i++) { stringBuffer.append(listBuffer[i]); } return stringBuffer.toString(); } // 直接构造 public String convert(String s, int numRows) { if (numRows <= 1 || numRows >= s.length()) { return s; } int width = 2 * numRows - 2; StringBuffer sb = new StringBuffer(); for (int i = 0; i < numRows; i++) { int cycles = 0; while (true) { int start = cycles * width; int nextStart = start + width; if (i == 0 || i == numRows - 1) { if (start + i < s.length()) { sb.append(s.charAt(start + i)); } } else { if (start + i < s.length()) { sb.append(s.charAt(start + i)); } if (nextStart - i < s.length()) { sb.append(s.charAt(nextStart - i)); } } if (nextStart > s.length()) { break; } cycles++; } } return sb.toString(); } public static void main(String[] args) { ConvertZ_6 convertZ_6 = new ConvertZ_6(); String s = "PAYPALISHIRING"; int rows = 4; String converted = convertZ_6.convert(s, rows); System.out.println(converted); }}
标签: #z变换是什么