6 ZigZig Conversion[M]Z字形变换
题目
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
And then read line by line: "PAHNAPLSIIGYIR"
Write the code that will take a string and make this conversion given a number of rows:
string convert(string s, int numRows);
Example:
Input: s= "ABCDEFGHIJKLMNOP", numRows = 4,
Output:AGMBFHLNCEIKODJP
Explanation:
A G M
B F H L N
C E I K O
D J P
思路:
先将字符串\(s\)进行Z字排列,再按行读取字符。将Z字分为上中下三个部分,则例子的Z上:ABCD,中:EF,下:GHIJ。分析其规律可以发现,对于指定的行数\(n\),中部的个数为\(n-2\),将每一个上+中作为一个循环,则循环周期为\(t=n+n-2\)。于是有
第1行:\(s[0], s[0+t],s[0+2 \cdot t], \cdots ;\)
第2行:\(s[1], s[0+t-1],s[1+t],\cdots;\)
\(\cdots\)
第\(n\)行:\(s[n-1],s[n-1+t],s[n-1+2 \cdot t]\cdots .\)
C++
class solution{
public:
string convert(string s, int numRows){
if(s.size()==1) return s;
string resString;
int stringLen=s.size();
int cycleLen=2*numRows-2;
for(int i=0;i<numRows;i++){
for(int j=0;j+i<stringLen;j+=cycleLen){
resString += s[i+j];
if(i !=0 && i != numRows-1 && j+cycleLen-i < stringLen){
resString+=s[j + cycleLen - i];
}
}
return resString;
}
};
python
class Solution(object):
def convert(self, s, numRows):
"""
:type s: str
:type numRows: int
:rtype: str
"""
if numRows == 1:
return s
rows = [""]*numRows
cycle = 2*numRows - 2
result = ""
level = 0 #层数
aux = -1
for i in s:
rows[level] += i
if(level == 0 or level == numRows -1):
aux *= -1
level += aux
for i in rows:
result += i
return result
6 ZigZig Conversion[M]Z字形变换的更多相关文章
- C#版[击败100.00%的提交] - Leetcode 6. Z字形变换 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - 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(6)Z字形变换
Leetcode(6)Z字形变换 [题目表述]: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" ...
- Java实现 LeetCode 6 Z字形变换
6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...
- [Swift]LeetCode6. Z字形变换 | ZigZag Conversion
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...
- 【LeetCode】ZigZag Conversion(Z 字形变换)
这道题是LeetCode里的第6道题. 题目要求: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" ...
- 6——Z 字形变换(ZigZag Conversion)
题目描述将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下: L C I RE T O E S ...
随机推荐
- Linq怎么支持Monad
在上一篇创建了我们的第一个Monad, Identity<T>. 我们确定了类型要变成Monad, 它必须有一个type constructor(Identity<T>), 和 ...
- rem简单实现移动端适配
rem:移动web开发 默认字体大小是16px 在<html>中设置字体大小 与em的区别: em是在父级设置字体大小受影响 移动端适配 首先获取屏幕的宽度 计算当前屏幕宽度和640的比例 ...
- Java基础9一面向对象
继承 1.特点 a) 要有一定的层次结构,并且具备可传递性. b) 判断两者之间是否有继承关系通过is-a来判断. c) 子类继承了父类,那么子类就继承了父类中所有的属性和方法,但是父类中的私有属性和 ...
- Laravel5 开启Debug
Laravel默认没有开启Debug,打开需要两步: .env文件中设置APP_DEBUG=true: 把Laravel服务重启一下(摸索出来的). 这只是开启了基本的调试模式,如果需要看更详细的调试 ...
- [转]SURF算法解析
SURF算法解析 一.积分图像 积分图像的概念是由Viola和Jones提出的.积分图像中任意一点(i,j)的值为原图像左上角到任意点(i,j)相应的对焦区域的灰度值的总和,其数学公式如图1所示 ...
- 将数据库返回的ResultSett转换成List装Map形式的方法(ResultSetToList)
多时候想做一些关于数据库实验,如果先搭建框架太麻烦,直接得到ResultSet处理起来取值什么的也很繁琐,为此我做了一个将ResultSet转换成List<Map<String,Objec ...
- 基于Nginx的SSL虚拟主机
通过私钥,证书对站点www.test.com的所有数据加密,实现通过https访问www.test.com 环境说明: 源码安装Nginx时必须使用--with-http_ssl_module参数,启 ...
- Javase范式
package Xwxx; import java.util.ArrayList; import java.util.Iterator; import java.util.function.IntBi ...
- BZOJ 1355: [Baltic2009]Radio Transmission AC自动机/KMP
被一个KMP傻题搞蒙圈了,此题AC自动机空间超限,只能用KMP写(我只会AC自动机QAQ)...... AC自动机 Code: // luogu-judger-enable-o2 #include & ...
- 洛谷 P1540 乌龟棋
第一感觉是定义状态f[n][i][j][k][kk],但这样空间和时间都承受不下.我们可以设状态为f[i][j][k][kk],这样可以省掉一个n,因为我们依据行走步数可以直接算出行走距离. Code ...