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 字形排列 ...
随机推荐
- 前端学习☞jquery
一 什么是jQuery对象? jQuery 对象就是通过jQuery包装DOM对象后产生的对象.jQuery 对象是 jQuery 独有的. 如果一个对象是 jQuery 对象, 那么它就可以使用 j ...
- F4NNIU 的 Docker 学习资料整理
F4NNIU 的 Docker 学习资料整理 Docker 介绍 以下来自 Wikipedia Docker是一个开放源代码软件项目,让应用程序部署在软件货柜下的工作可以自动化进行,借此在Linux操 ...
- JS高级第1天
阶段目标 主要学习 JS 的面向对象编程思想. 对象 概念 在编程领域,任何 事 和 物都可以概括成对象. 对象概念练习 用编程思想抽象出你心仪对象的属性和方法. 对象由属性和方法组成,属性和方法都可 ...
- jasperReports 通过java导出各种格式报表,及javaweb项目整合显示各种报表
注意:编写此项目时,请先手动编写**.jrxml 或者用IReport生成**.jrxml或**.jasper 注:java导出报表与web项目显示报表方法其实是相同的,只不过有一句代码不同,如下 ...
- H3C 路由器SSH服务配置命令(续)
- activiti工作流引擎之uel表达式
qq讨论群:313032825本人做了一个微信公众号,用于分享各类视频学习资源和我多年学习经验,喜欢的可以关注哦! 有了前面几章,我们肯定有一定的困惑,activiti如何与实际业务整合,比如一条采购 ...
- oracle merge into 新增或者修改
merge into sn_balance b1 using(select 'admin' as userid,1 as type1 from dual) b2 on(b1.userid=b2.use ...
- ThinkPHP5.1接收post、get参数
我们要先认识的是请求对象Request类 <?php//要用Request类 第一步就要引入他,才能在当前控制器上使用//知识点:use 与 namespace前面不可有空格等其他操作.name ...
- python中使用指定GPU
import os os.environ["CUDA_VISIBLE_DEVICES"] = "2" # 或 os.environ["CUDA_VIS ...
- 2008年NOIP普及组复赛题解
题目涉及算法: ISBN号码:简单字符串模拟: 排座椅:贪心: 传球游戏:动态规划: 立体图:模拟. ISBN号码 题目链接:https://www.luogu.org/problem/P1055 简 ...