一.按行存储

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的更多相关文章

  1. C#版[击败100.00%的提交] - Leetcode 6. Z字形变换 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

  2. Leetcode(6)Z字形变换

    Leetcode(6)Z字形变换 [题目表述]: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" ...

  3. Java实现 LeetCode 6 Z字形变换

    6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...

  4. Leetcode题库——6.Z字形变换

    @author: ZZQ @software: PyCharm @file: convert.py @time: 2018/9/20 20:12 要求: Z字形变换 将字符串 "PAYPAL ...

  5. LeetCode Golang 6. Z 字形变换

    6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...

  6. Z 字形变换 C++实现 java实现 leetcode系列(六)

    Z 字形变换  java实现 C++实现  将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 ...

  7. 【LeetCode】ZigZag Conversion(Z 字形变换)

    这道题是LeetCode里的第6道题. 题目要求: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" ...

  8. leetcode刷题六<z字形变换>

    将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐 ...

  9. [LeetCode] 6. Z 字形变换

    题目链接:(https://leetcode-cn.com/problems/zigzag-conversion/) 题目描述: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列 ...

随机推荐

  1. mysql带有子查询的like查询

    SELECT * FROM by_app_categories WHERE c_name LIKE CONCAT('%', (SELECT `name` FROM b_catelist WHERE t ...

  2. Nacos Committer 张龙:Nacos Sync 的设计原理和规划

    图:Nacos Meetup @杭州 与你同行,抬头便是星空. 本文整理自Nacos Committer 张龙的现场分享,阿里巴巴中间件受权发布. 随着 Nacos 1.0.0 稳定版的发布,越来越多 ...

  3. 20172018-acmicpc-southeastern-european-regional-programming-contest-seerc-2017-en A - Concerts

    题意就是给一个字母序列a,以及一个另外一个字母序列b,你需要b中找到字母序列a,并且要求对于在b中的字母序列a,每个单词都需要满足相应的距离 其实很简单,我们利用DP[i][j]代表a已经匹配i个位置 ...

  4. HDFS Concepts-blocks

  5. @hdu - 5503@ EarthCup

    目录 @description@ @solution@ @accepted code@ @details@ @description@ n 个队伍两两之间比赛,保证没有平局. 现在给出 n 个队伍分别 ...

  6. 中国剩余定理(SCAUOJ 1077)

    1077 韩信点兵 时间限制:500MS  内存限制:65536K提交次数:1103 通过次数:99 题型: 编程题   语言: 无限制 Description 相传汉高祖刘邦问大将军韩信统御兵士多少 ...

  7. Laravel5.2 发送邮件(smtp方式最简单的讲解!)-邮件部分

    https://blog.csdn.net/wulove52/article/details/71172842 Laravel集成了SwiftMailer库进行邮件发送,邮件配置文件位于config/ ...

  8. hdu 1789 Doing Homework again (Greedy)

    Problem - 1789 继续贪心.经典贪心算法,如果数据比较大就要用线段树来维护了. 思路很简单,只要按照代价由大到小排序,然后靠后插入即可.RE了一次,是没想到deadline可以很大.如果d ...

  9. 第三期 第三期 搜索——1.运动规划(motion_planing)

    运动规划的根本问题在于机器人可能存在于一个这样的世界中, 它可能想找到一条到达这个目标的路径,那么就需要指定一个到达那里的计划, 自动驾驶汽车也会遇到这个问题.他可能处于高速公路的附近的街道网络中,他 ...

  10. [C#] 用ServiceStack读写redis的性能问题

    ServiceStack.Redis有个方法叫 AddRangeToList,这个方法是有性能问题的.这个方法的实现代码如下: public void AddRangeToList(string li ...