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 字形排列 ...
随机推荐
- Java实现接口用来弥补Java单继承的缺陷
package com.test3;/** * @author qingfeng * 功能:继承类 VS 实现接口 :两者之间的关系(实现接口用来弥补Java单继承的缺陷) */public clas ...
- HDU-1260_Tickets
Tickets Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Des ...
- LeetCode80 Remove Duplicates from Sorted Array II
题目: Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? (Mediu ...
- huyingsakai的Python学习day1:计算机硬件
1.python是什么?Python是一门编程语言 2.什么是编程语言?(*****)程序员和计算机沟通交流的介质 3.什么是编程?(*****)编程就是程序员想把内心表达的方法用某种计算机语言思维表 ...
- 洛谷P1616 疯狂的采药
//完全背包 #include<bits/stdc++.h> using namespace std; ; ; int n,m,v[maxn],w[maxn],f[maxv]; int m ...
- 初识block
我们可以把Block当做Objective-C的匿名函数.Block允许开发者在两个对象之间将任意的语句当做数据进行传递,往往这要比引用定义在别处的函数直观.另外,block的实现具有封闭性(clos ...
- js获取dom节点
var s= document.getElementById("test");del_ff(s); //清理空格var chils= s.childNodes; //得到s的全部子 ...
- pip、conda 换国内源,大大提高下载速度
https://www.jianshu.com/p/b2d53904dd37 源就是下载地址了,换到国内的源下载速度真的快了近10倍,这里都用了清华的源 pip 只要新建一个配置文件,写上路径就行了 ...
- Java JDBC学习实战(二): 管理结果集
在我的上一篇博客<Java JDBC学习实战(一): JDBC的基本操作>中,简要介绍了jdbc开发的基本流程,并详细介绍了Statement和PreparedStatement的使用:利 ...
- H3C CHAP验证配置示例二