当前位置: 首页> 文旅> 艺术 > JAVA学习-练习试用Java实现“Z字形变换”

JAVA学习-练习试用Java实现“Z字形变换”

时间:2025/7/9 1:36:10来源:https://blog.csdn.net/weixin_69763181/article/details/139339852 浏览次数:0次

问题:

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:

P   A   H   N
A P L S I I G
Y   I   R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。

请实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);
示例 1:

输入:s = "PAYPALISHIRING", numRows = 3
输出:"PAHNAPLSIIGYIR"
示例 2:

输入:s = "PAYPALISHIRING", numRows = 4
输出:"PINALSIGYAHRPI"
解释:
P     I    N
A   L S  I G
Y A   H R
P     I
示例 3:

输入:s = "A", numRows = 1
输出:"A"
提示:

1 <= s.length <= 1000
s 由英文字母(小写和大写)、',' 和 '.' 组成
1 <= numRows <= 1000

解答思路:

以下是使用 Java 实现Z 字形变换问题的代码:

public class ZShape {public static String convert(String s, int numRows) {if (numRows == 1) {return s;}StringBuilder[] rows = new StringBuilder[numRows];for (int i = 0; i < numRows; i++) {rows[i] = new StringBuilder();}int currentRow = 0;int direction = -1;for (char c : s.toCharArray()) {rows[currentRow].append(c);if (currentRow == 0 || currentRow == numRows - 1) {direction *= -1;}currentRow += direction;}StringBuilder result = new StringBuilder();for (StringBuilder row : rows) {result.append(row.toString());}return result.toString();}public static void main(String[] args) {String s = "PAYPALISHIRING";int numRows = 3;System.out.println(convert(s, numRows));}}

在上述代码中,首先判断行数是否为 1,如果是则直接返回原始字符串。然后,创建一个'StringBuilder'数组来存储每一行的字符。使用一个变量'currentRow'来跟踪当前所在的行,并使用一个变量'direction'来控制移动的方向。当到达第一行或最后一行时,方向会反转。最后,将每行的字符连接成最终的结果字符串。

这种方法的时间复杂度为 O(n),其中 n 是输入字符串的长度。因为只需要遍历字符串一次。

关键字:JAVA学习-练习试用Java实现“Z字形变换”

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: