[模拟|字符串] leetcode 6 Z字形变换
[模拟|字符串] leetcode 6 Z字形变换
1.题目
题目链接
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:
L C I R
E T O E S I I G
E D H N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。
示例1:
输入: s = "LEETCODEISHIRING", numRows = 3
输出: "LCIRETOESIIGEDHN"
示例2:
输入: s = "LEETCODEISHIRING", numRows = 4
输出: "LDREOEIIECIHNTSG"
解释:
L D R
E O E I I
E C I H N
T S G
2.分析
2.1.结果存储
输入给出的是一维的顺序字符串,而输出的字符串是建立在“Z字型”这样一个二维结构上的。因此可以首先考虑建立一个二维数组来存储这个Z字形结构。
由于字符串本质上是一个一维的字符数组,因此我们建立一个字符串数组便可以模拟这一二维结构:
string convert(string s, int numRows) {if (numRows == 1) { //输出也是一行的话则直接返回原字符串return s;}//行数比字符串长度大的话,实际上只有一列vector<string> rows(min(numRows, int(s.size())));//......
}
2.2.遍历顺序
“Z字型”(或者看起来更像"N字型")遍历,本质上是先往下,再往上,再往下…因此我们需要判断好什么时候调整遍历的方向。
而只有在两种情况下需要调整方向:遍历到第0行(方向需调整至向下),遍历到最后一行(方向需调整至向上)。
int curRow = 0; //当前行
bool goingDown = false; //是否向下
for (char c : s) {rows[curRow] += c; //将该字符存入对应的结果行中if (curRow == 0 || curRow == numRows - 1) { //反向goingDown = !goingDown;}curRow += goingDown ? 1 : -1; //根据方向调整行数
}
实际上本题到这里就几乎做完了。以示例2为例,表面上我们要存储的输出为:
L D R
E O E I I
E C I H N
T S G
实际上存储的是:
L D R
E O E I I
E C I H N
T S G
按行展开后依然为LDREOEIIECIHNTSG,因为我们并不关心每行之间的空格。
3.代码
class Solution {public:string convert(string s, int numRows) {//输出也是一行的话则直接返回原字符串if (numRows == 1) { return s;}//行数比字符串长度大的话,实际上只有一列vector<string> rows(min(numRows, int(s.size())));int curRow = 0;//当前行bool goingDown = false;//是否向下for (char c : s) {rows[curRow] += c;//将该字符存入对应的结果行中if (curRow == 0 || curRow == numRows - 1) {//反向goingDown = !goingDown;}curRow += goingDown ? 1 : -1;//根据方向调整行数}string res;for (string row : rows) {res += row;}return res;}
};
[模拟|字符串] leetcode 6 Z字形变换相关推荐
- LeetCode 6.z字形变换
LeetCode 6.z字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时, ...
- Java实现 LeetCode 6 Z字形变换
6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...
- LeetCode 6 Z字形变换
将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数: P A H N A P L S I I G Y I R 之后从左往右,逐行读取字符:"PAHNAP ...
- LeetCode——6. Z 字形变换
6. Z 字形变换(中等难度) 题目描述: 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "PAYPALISHIRING ...
- LeetCode 6. Z 字形变换(找规律)
1. 题目 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I ...
- Leetcode 006. Z 字形变换 | 每日一题
题目描述: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I ...
- Leetcode 6.Z 字形变换 (每日一题 20210630)
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下.从左到右进行 Z 字形排列.比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:P A ...
- leetcode —— 6. Z 字形变换
将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I R E T ...
- LeetCode 6. Z 字形变换 (N字形变换)
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下: P ...
最新文章
- Linux堆内存管理深入分析
- android 图片放大缩小 多点触摸,Android 多点触摸(图片放大缩小)
- boost::mp11::mp_join相关用法的测试程序
- 元素或为1或为-1的行列式的值的估计
- 使用eclipse svn塔建(配置)时的一点点心得
- 离散元 python_离散元在土木工程领域的应用前景如何?
- Java this添加窗口,如何使一个窗口,看起来像这样在Java中? (How to make a window look like this in Java?)...
- jquery.lazyload 插件实现图片延迟加载
- 平衡二叉树的判定(LeetCode 110)
- %02 java_Java基础02—变量、运算符和数据类型转换(示例代码)
- Lync Server 2013 实战系列之二:标准版-前期准备
- 网站服务器怎么查ipv4,服务器的ipv4地址怎么查
- 用python爬取之后发现果然如此,都说知乎的小姐姐漂亮
- 数据库安全性相关习题。
- Vscode配置C++(一步一步图文详解)
- window10下的VS2019环境变量配置教程
- android storage 路径,风儿带你了解Android存储路径。
- python实现1/n倍频程计算
- EC11旋转编码器驱动程序
- 88句名言,很深刻的
热门文章
- android rsa解密前面带乱码,C#rsa解密的解出来的结果乱码
- python中yield的使用(两分钟读懂)
- 用python自动化玩游戏封号吗_用 Python 自动化办公能做到哪些有趣或有用的事情?...
- vue怎么根据id获取组件_vue子组件,如何根据父组件传进来的id,去查询详情,并在子组件中显示?...
- 力扣 496 下一个更大的元素I
- root启动php报错,php使用root用户启动
- 操作系统 第二章 进程管理
- 保存一个 Python 对象,之后使用时直接读取
- Java实验4 面向对象基础
- 词汇表生成(C语言)