Z字形变换 leetcode 6
一.按行存储
1.解题思路
1.通过当前行的不断上下循环移动
2.将字符按序存放入vector中
3.最后再按行取出
2.代码及注释
class Solution {
public:
string convert(string s, int numRows) {
//如果行数等于1或者行数和字符长度相等则直接返回s;
if(numRows==||s.size()<=numRows) return s;
/*
1.用vector代替二维数组方便
2.定义长度为行数
*/
vector<string> rows(numRows);
//当前从第零行开始
int curRow = ;
//flag标志是向下还是向上进行->行移动 0为向下移动 1为向上移动
int flag = ;
//循环将每个字符放入vector中 字符是按序进行而行数是上下循环进行
for(int i=;i<s.size();i++){
//存放字符
rows[curRow]+=s[i];
/*
1.当前行移动到最后一行时,改变flag从而开始向上移动
2.当前行移动到第一行时,改变flag从而开始向下移动
*/
if(curRow==numRows-){
flag = ;
}else if(curRow==){
flag = ;
}
//上下移动
if(flag==){
curRow++;
}else{
curRow--;
}
}
//将字符按行取出 存放入t中
string t="";
for(string s:rows){
t+=s;
}
return t;
}
二.数学计算
1.解题思路

2.代码及注释
class Solution {
public:
string convert(string s, int numRows) {
//当行数为1或者字符串长度小于行数时直接输出s
if(numRows==||s.size()<numRows) return s;
//定义all为跳转一次时移动的长度
int all = (numRows-)*;
/*
w存储行数 当前行不为第一行和最后一行时用(w-1)*2计算两次跳转中
第一次跳转时移动的长度
*/
int w = numRows;
//结果字符串
string ans = "";
//i代表当前行数
for(int i=;i<numRows;i++){
int j=i;
//当前行为第一行和最后一行时 重复加上跳转一次的长度即为all
if(i==||i==numRows-){
while(j<s.size()){
ans+=s[j];
j+=all;
}
}else{
//当前行不为第一行和最后一行时,需要跳转两次
int left = (w-)*;
while(j<s.size()){
ans+=s[j];
//移动left
j+=left;
//考虑超越边界
if(j>=s.size()) break;
ans+=s[j];
//移动right
j+=all-left;
}
}
//w更新每次减少1
w--;
}
return ans;
}
};
Z字形变换 leetcode 6的更多相关文章
- C#版[击败100.00%的提交] - Leetcode 6. Z字形变换 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- Leetcode(6)Z字形变换
Leetcode(6)Z字形变换 [题目表述]: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" ...
- Java实现 LeetCode 6 Z字形变换
6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...
- 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 之后,你的输出需要从左往右逐 ...
- [LeetCode] 6. Z 字形变换
题目链接:(https://leetcode-cn.com/problems/zigzag-conversion/) 题目描述: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列 ...
随机推荐
- mysql带有子查询的like查询
SELECT * FROM by_app_categories WHERE c_name LIKE CONCAT('%', (SELECT `name` FROM b_catelist WHERE t ...
- Nacos Committer 张龙:Nacos Sync 的设计原理和规划
图:Nacos Meetup @杭州 与你同行,抬头便是星空. 本文整理自Nacos Committer 张龙的现场分享,阿里巴巴中间件受权发布. 随着 Nacos 1.0.0 稳定版的发布,越来越多 ...
- 20172018-acmicpc-southeastern-european-regional-programming-contest-seerc-2017-en A - Concerts
题意就是给一个字母序列a,以及一个另外一个字母序列b,你需要b中找到字母序列a,并且要求对于在b中的字母序列a,每个单词都需要满足相应的距离 其实很简单,我们利用DP[i][j]代表a已经匹配i个位置 ...
- HDFS Concepts-blocks
- @hdu - 5503@ EarthCup
目录 @description@ @solution@ @accepted code@ @details@ @description@ n 个队伍两两之间比赛,保证没有平局. 现在给出 n 个队伍分别 ...
- 中国剩余定理(SCAUOJ 1077)
1077 韩信点兵 时间限制:500MS 内存限制:65536K提交次数:1103 通过次数:99 题型: 编程题 语言: 无限制 Description 相传汉高祖刘邦问大将军韩信统御兵士多少 ...
- Laravel5.2 发送邮件(smtp方式最简单的讲解!)-邮件部分
https://blog.csdn.net/wulove52/article/details/71172842 Laravel集成了SwiftMailer库进行邮件发送,邮件配置文件位于config/ ...
- hdu 1789 Doing Homework again (Greedy)
Problem - 1789 继续贪心.经典贪心算法,如果数据比较大就要用线段树来维护了. 思路很简单,只要按照代价由大到小排序,然后靠后插入即可.RE了一次,是没想到deadline可以很大.如果d ...
- 第三期 第三期 搜索——1.运动规划(motion_planing)
运动规划的根本问题在于机器人可能存在于一个这样的世界中, 它可能想找到一条到达这个目标的路径,那么就需要指定一个到达那里的计划, 自动驾驶汽车也会遇到这个问题.他可能处于高速公路的附近的街道网络中,他 ...
- [C#] 用ServiceStack读写redis的性能问题
ServiceStack.Redis有个方法叫 AddRangeToList,这个方法是有性能问题的.这个方法的实现代码如下: public void AddRangeToList(string li ...