leetcode-6-Z字形变换
题目描述:
"PAYPALISHIRING" 以Z字形排列成给定的行数: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
要完成的函数:
string convert(string s, int numRows)
说明:
1、这道题给定一个字符串s和行数,要求将字符串按z字形排列,具体见“题目描述”中举的例子。
排列完之后,再按行读取,最后输出新的字符串结果。
2、这道题感觉比easy题难一点点,但是比上次做的琐碎无比的medium好得不要太多!
这道题我们只要明白规律就可以了,不用真的去把字符串排列成z字形存储起来,再按行读取的~
举个例子,比如,s = "PAYPALISHIRING", numRows = 4
P I N
A L S I G
Y A H R
P I
当行数为4时,我们可以看到每座“山”(从P到L)有6个元素,而我们一共有3座“山”。
所以我们需要的是字符串中第0个元素,第6个元素,第12个元素。(不断加6)
以及第二行的字符串中第1个元素,第5个元素,第7个元素,第11个元素,第13个元素。(加4加2,再重复)
以及第三行的字符串中第2个元素,第4个元素,第8个元素,第10个元素。(加2加4,再重复)
以及第四行的字符串中第3个元素,第9个元素。(不断加6)
我们可以发现什么规律?
我们可以根据numRows和字符串s的长度,知道有几座“山”,知道每座“山”的元素个数。
进而可以根据每座山的元素个数,得到字符串中的坐标。
比如上述例子中,每座山的元素个数是6,所以字符串中的坐标是0,6,12(不能超出字符串的长度)
接着,我们从第二行的1开始,这时候要加4,再加6-4=2,不断地加,得到坐标是1,5,7,11,13(不能超出字符串的长度)
再接着,从第三行的2开始,这时候要加2,再加6-2=4,不断地加……
最后,从最后一行的3开始,这时候要加6-0=6,不断地加……
如此这般,便可得到新的字符串,代码如下:(附详解)
string convert(string s, int numRows)
{
if(numRows==1)//边界情况,如果只有1行,那么直接返回原本的字符串
return s;
int s1=s.size(),s2=2*numRows-2,s3=s2,index=0,index1,count=0;//s2表示山峰的元素个数
string res=s;
for(int i=0;i<numRows;i++)//逐行处理
{
index1=index;//记录一下index的值,最开始为0,接着是1,再接着是2……
while(index<s1)//每一行中只要坐标index不超过字符串的长度,那么不断处理
{
if(s3==s2)//如果是第一行
{
res[count]=s[index];
index+=s3;
count++;
}
else if(s3==0)//如果是最后一行
{
res[count]=s[index];
index+=(s2-s3);
count++;
}
else//如果是中间行
{
res[count]=s[index];
index+=s3;
count++;
if(index<s1)//不能超过字符串的长度
{
res[count]=s[index];
index+=(s2-s3);
count++;
}
}
}
s3-=2;//处理完一行之后,s3减去2
index=index1+1;//更新index的值
}
return res;//最后返回新的字符串
}
上述代码实测16ms,beats 95.97% of cpp submissions。
leetcode-6-Z字形变换的更多相关文章
- C#版[击败100.00%的提交] - Leetcode 6. Z字形变换 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- Java实现 LeetCode 6 Z字形变换
6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...
- [LeetCode] 6. Z 字形变换
题目链接:(https://leetcode-cn.com/problems/zigzag-conversion/) 题目描述: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列 ...
- LeetCode 6. Z字形变换(ZigZag Conversion)
题目描述 将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数: P A H N A P L S I I G Y I R 之后从左往右,逐行读取字符:"P ...
- Leetcode(6)Z字形变换
Leetcode(6)Z字形变换 [题目表述]: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" ...
- Leetcode题库——6.Z字形变换
@author: ZZQ @software: PyCharm @file: convert.py @time: 2018/9/20 20:12 要求: Z字形变换 将字符串 "PAYPAL ...
- LeetCode Golang 6. Z 字形变换
6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...
- Z 字形变换 C++实现 java实现 leetcode系列(六)
Z 字形变换 java实现 C++实现 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 ...
- 【LeetCode】ZigZag Conversion(Z 字形变换)
这道题是LeetCode里的第6道题. 题目要求: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" ...
- leetcode刷题六<z字形变换>
将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐 ...
随机推荐
- git 本地忽略某些个文件
git update-index --assume-unchanged <要忽略的文件> git update-index --no-assume-unchanged <要取消忽略的 ...
- Yii2 windows 安装步骤
安装 Yii2 高级版应用 基础版可以看官方文档 今天安装了YII2高级版应用 写下步骤 留个记号,以备查询! 在 Windows 中,你首先需要下载并运行 Composer-Setup.exe 查看 ...
- CHANGE DETECTION IN ANGULAR 2
In this article I will talk in depth about the Angular 2 change detection system. HIGH-LEVEL OVERVIE ...
- 【美食技术】家庭自制DIY鸡蛋饼和疙瘩汤早餐视频教程
鸡蛋饼制作方法 食材准备面粉 150g鸡蛋饼 鸡蛋饼鸡蛋 2个盐 适量水 适量(约300ml)油 20g荵花适量也可根据自己喜好准备一些调味料. 做法 鸡蛋饼是一种家常点心,做法很多,这里提供3种. ...
- C++中函数模版与类模版
1.什么是模板? (1)可以这样来解释这个问题,例如当我们需要定义多个函数,而这个函数功能其实都是一样的,例如两个数相加的函数, 只是相加的两个数的类型不相同而已,这就导致我们需要定义多个函数:当我们 ...
- linux每天一小步---alias命令详解
1 命令功能 alias命令用来设置指令的别名,alias命令设置的别名只限于该次登陆操作,若要每次登入即自动设好别名,可在/etc/profile或自己的~/.bashrc中设定指令的别名. ...
- 2.自己的Github注册流程
一开始申请Github,说实话我真的不知道它是什么东西,而且有什么用途.然后我就用360百科搜索了一下有关它的介绍:. 而说明的是Git是一个分布式的版本控制系统.然后我进入官方网站进行账号注册,而注 ...
- 切图,css注意事项
1.文字尽量不要独立放在div中,一般放在p,span中(显得不专业) 2.div给了width就不要用padding-left,padding-right:给了height就不给padding-to ...
- CDH4.1.2 集群安装配置详细过程
http://wenku.baidu.com/link?url=Wu43MFbzKH8hu7AgGfajmOr0WpRMX_gJlMDUs6pSrBK2LOJWIMpfWZa7IW-BSPko1yGl ...
- 大坑记录 - shell脚本删除操作
背景 jenkins执行去执行shell命令,其中引用了一些jenkins的变量,如${WORKSPACE}这种,因为每次执行jenkins比较慢,于是想复制脚本出来想本地调试一下,直接复制了脚本过来 ...