2016 - 2024

感恩一路有你

深入解析LeetCode--字符串的Z字形变换

浏览量:4499 时间:2024-05-18 17:56:07 作者:采采

题目简述

在LeetCode中有一道关于字符串Z字形变换的题目,要求将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z字形排列。本篇文章将分享通过遍历字符串来填充各行数据,然后再逐行输出的算法。

解题思路

在解题前,我们先抛开题目描述,仅从最终的Z字形输出来看,其本质是遍历字符串,将各个字符输出到不同行中。核心在于行号的变化规则:当处于第一行时,行号递增;当来到最后一行时,行号递减。

代码实现

首先,根据给定的行数和字符串长度确定最终输出的行数,然后创建相应数量的StringBuilder列表用于存储每行的字符。接着,遍历字符串的所有字符,根据不同行号将字符添加到对应的StringBuilder中,关键在于处理行号的变化规则。

```java

public String convert(String s, int numRows) {

if (numRows 1) return s;

List rows new ArrayList<>();

for (int i 0; i < Math.min(numRows, s.length()); i ) {

(new StringBuilder());

}

int curRow 0;

boolean goingDown false;

for (char c : ()) {

(curRow).append(c);

if (curRow 0 || curRow numRows - 1) goingDown !goingDown;

curRow goingDown ? 1 : -1;

}

StringBuilder result new StringBuilder();

for (StringBuilder row : rows) {

(row);

}

return ();

}

```

测试与输出

通过编写主方法进行测试,可以验证上述算法的正确性。

```java

public static void main(String[] args) {

Solution solution new Solution();

String input "LEETCODEISHIRING";

int numRows 3;

String output (input, numRows);

(output);

}

```

经过测试,控制台输出结果符合预期,证明算法实现正确。LeetCode上也有相关题目,欢迎进一步挑战和学习。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。