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 字形排列 ...
随机推荐
- ROS 用 roboware实现节点信息发送和接收
在ros下实现节点编程,实现一个节点发送消息,另一个节点接收.实现方式有多种,可以直接在命令窗口创建工作空间包以及节点,用catkin_make进行编译,添加.bash路径,然后执行rosrun p ...
- HZOJ 赤(CF739E Gosha is hunting)
本来没有打算写题解的,时间有点紧.但是这个wqs二分看了好久才明白还是写点东西吧. 题解就直接粘dg的了: 赤(red) 本题来自codeforces 739E,加大了数据范围. 首先对一只猫不会扔两 ...
- 从零学React Native之03页面导航
之前我们介绍了RN相关的知识: 是时候了解React Native了 从零学React Native之01创建第一个程序 从零学React Native之02状态机 本篇主要介绍页面导航 上一篇文章给 ...
- Oracle中组合索引的使用详解(转)
在Oracle中可以创建组合索引,即同时包含两个或两个以上列的索引.在组合索引的使用方面,Oracle有以下特点: 1. 当使用基于规则的优化器(RBO)时,只有当组合索引的前导列出现在SQL语句的w ...
- @codeforces - 414E@ Mashmokh's Designed Problem
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一棵 n 个点的树,每个点的儿子是有序的. 现给定 m 次操 ...
- 梯度优化算法Adam
最近读一个代码发现用了一个梯度更新方法, 刚开始还以为是什么奇奇怪怪的梯度下降法, 最后分析一下是用一阶梯度及其二次幂做的梯度更新.网上搜了一下, 果然就是称为Adam的梯度更新算法, 全称是:自适应 ...
- PHP内置服务器
PHP在安装的时候会内置了服务器的功能,我们在使用的过程中如果只是调试,可以选择启动PHP内置的服务器,下面是windows下PHP内置服务器的启动步骤: 1.将php的D:\phpStudy\php ...
- CSS的固定定位
将元素放置在浏览器窗口的固定位置,拖拽窗口时元素位置不变. 类似语法: div{ position:fixed; top:0px; left:0px; right:0px; bottom:0px; }
- JavaScript引用类型和基本类型的区别
JavaScript变量可以用来保存的两种类型的值:基本类型值和引用类型值. 基本类型值有5种类型:undefined,null,boolean,number,string 引用类型值有两种类型:函数 ...
- h5 的canvas绘制基本图形
文章地址:https://www.cnblogs.com/sandraryan/ canvas是一个标签,可用于绘制复杂图形,渲染效果比普通DOM快 某些低版本浏览器不支持 canvas 使用原生几乎 ...