当前位置: 首页> 财经> 创投人物 > 广州疫情最新2021封城_微信公众号怎么建立_哪个浏览器不屏蔽网站_windows优化大师官方网站

广州疫情最新2021封城_微信公众号怎么建立_哪个浏览器不屏蔽网站_windows优化大师官方网站

时间:2025/7/9 0:59:52来源:https://blog.csdn.net/YQ20210216/article/details/145503060 浏览次数:0次
广州疫情最新2021封城_微信公众号怎么建立_哪个浏览器不屏蔽网站_windows优化大师官方网站

文章目录

  • 1.题目
  • 6. Z [字形变换](https://leetcode.cn/problems/zigzag-conversion/?envType=problem-list-v2&envId=qVg9d5vs)
  • 2.思路
  • 3.代码


1.题目

6. Z 字形变换

将一个给定字符串 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`

2.思路

我们划分numRows * 2 - 2为一个周期,也就是 |/ 部分,,对字符串 s 进行遍历,对于字符串中的每个字符 s[i],计算它应该被放置在哪一行。通过取 i % kk - i % k 中的较小值得到当前字符所在的行号 row,最后将每一部分拼接起来。

3.代码

class Solution {
public:string convert(string s, int numRows) {// 处理边界情况if (s.empty() || numRows <= 0) return ""; // 如果字符串为空或 numRows 无效,返回空字符串if (numRows == 1) return s; // 如果 numRows 为 1,直接返回原字符串int n = s.size();          // 字符串长度int k = 2 * numRows - 2;   // 计算周期vector<string> rows(numRows); // 存储每行的字符// 遍历字符串for (int i = 0; i < n; i++) {// 计算当前字符应该放在哪一行int row = i % k;if (row >= numRows) {row = k - row; // 如果超出 numRows,调整行号}rows[row] += s[i]; // 将字符添加到对应行}// 将 vector<string> 按行拼接成最终结果string result;for (const string& str : rows) {result += str;}return result;}
};

关键字:广州疫情最新2021封城_微信公众号怎么建立_哪个浏览器不屏蔽网站_windows优化大师官方网站

版权声明:

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

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

责任编辑: