[LeetCode 题解]: ZigZag Conversion
前言
【LeetCode 题解】系列传送门: http://www.cnblogs.com/double-win/category/573499.html
1.题目描述
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)
P A H N
A P L S I I G
Y I R
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 text, int nRows);
convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".
2. 相关题目
ZigZag again:
在本人之前的博客中,曾列出过另一个ZigZag数组的例子http://www.cnblogs.com/double-win/p/3641657.html
与上一篇不同的是,本题对于ZigZag的规则则有所不同。
|
图一 |
图二 |
3. 思路
如果我们将数组分成矩形框中的部分,那么可以看到有如下的规律:
(1)在矩形框图一中的子结构中,设行号为i (i=1~nRows)每次都是行号先增加,后减小: 在矩形框中的数据的个数为 :A = 2*(nRows-1).
1) 若用 string temp[nRows]来存储每一行的数据
2) 子结构可以分成两个部分, 一个是行号从1~nRows, 另一个是行号从nRow-1~2
(2)矩形框之外的结构的数据个数B为: s.size()% A.
1) 若 B<nRows, 那么多出来的字符只能依次填多出来的一列;如图二中的 NG
2) 若 B >nRows, 那么必然可以将某一列都填满,多出来的数据有B-=nRows, 行号的变化范围为 nRow-1 : nRow-B
4. 解法
1 class Solution {
2 public:
3 string convert(string s,int nRows)
4 {
5 if(nRows==1) return s;
6 int i=0,j=0,Count=0;
7 string a[nRows],b;
8 for(i=0;i<nRows;i++)
9 a[i].clear();
10 b.clear();
11 int time = s.size()/2/(nRows-1); //完整子结构出现的次数
12 int remain = s.size()%(2*(nRows-1)); // 剩余不足一个子结构的数据长度
13
14 while(time--)
15 {
16 for(i=0;i<nRows;i++)
17 a[i]+=s[Count++];
18 for(i=nRows-2;i>=1;i--)
19 a[i]+=s[Count++];
20 }
21
22 if(remain<=nRows) // 剩余的数据不足nRows
23 {
24 for(i=0;i<remain;i++)
25 a[i]+=s[Count++];
26 }
27 else //剩余的数据在nRows~ 2*(nRow-1)-1 之间
28 {
29 for(i=0;i<nRows;i++)
30 a[i]+=s[Count++];
31 remain-=nRows;
32 i=nRows-2;
33 for(j=0;j<remain;j++)
34 a[i--] += s[Count++];
35 }
36 for(i=0;i<nRows;i++)
37 b+=a[i];
38 return b;
39 }
40 };
![]() |
作者:Double_Win 出处: http://www.cnblogs.com/double-win/p/3687749.html 声明: 由于本人水平有限,文章在表述和代码方面如有不妥之处,欢迎批评指正~ |
[LeetCode 题解]: ZigZag Conversion的更多相关文章
- leetcode题解||ZigZag Conversion问题
problem: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of r ...
- LeetCode题解——ZigZag Conversion
题目: 把一个字符串按照Z型排列后打印出来,例如 "PAYPALISHIRING" 重新排列后为3行,即 P A H N A P L S I I G Y I R 那么输出为&quo ...
- LeetCode 6. ZigZag Conversion & 字符串
ZigZag Conversion 看了三遍题目才懂,都有点怀疑自己是不是够聪明... 就是排成这个样子啦,然后从左往右逐行读取返回. 这题看起来很简单,做起来,应该也很简单. 通过位置计算行数: P ...
- Leetcode 6. ZigZag Conversion(找规律,水题)
6. ZigZag Conversion Medium The string "PAYPALISHIRING" is written in a zigzag pattern on ...
- LeetCode 6 ZigZag Conversion 模拟 难度:0
https://leetcode.com/problems/zigzag-conversion/ The string "PAYPALISHIRING" is written in ...
- LeetCode 6 ZigZag Conversion(规律)
题目来源:https://leetcode.com/problems/zigzag-conversion/ The string "PAYPALISHIRING" is writt ...
- [LeetCode][Python]ZigZag Conversion
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com'https://oj.leetcode.com/problems/zigzag- ...
- LeetCode——6. ZigZag Conversion
一.题目链接:https://leetcode.com/problems/zigzag-conversion/description/ 二.题目大意: 给定一个字符串和一个数字,将其转换成Zigzag ...
- 蜗牛慢慢爬 LeetCode 6. ZigZag Conversion [Difficulty: Medium]
题目 The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows li ...
随机推荐
- 不同的类UNIX操作系统密码破解方法介绍
(一)Linux 系统密码破解 1.在grub选项菜单按E进入编辑模式 2.编辑kernel那行 /init 1 (或/single) 3.按B重启 4.进入后执行下列命令 root@#passwd ...
- 推荐一篇mysql优化干货
淘宝的技术一直比较前沿,特别是LVS的作者加入淘宝后,淘宝和阿里的开源做的有声有色,君不见淘宝出了tengine,tairs,tddl,hsf(soa框架,未开源),tfs(小文件存储系统)等等,阿里 ...
- 初始mysql语句
操作文件夹(库) 增 : create database db1 charset utf8; 查 : #查看当前创建的数据库 show create database db1; #查看所有的数据库 s ...
- sql之分段统计
sql之分段统计 需求:获取一个县所有家庭人数在1-2人,3-4人,5-6人,6人以上的家庭数的数组 思路:通过CASE WHEN 将 CBFCYSL分组,然后统计数据条数. 语句: SELECT T ...
- winform中读取App.config中数据连接字符串
1.首先要在工程引用中导入System.Configuration.dll文件的引用. 2.通过System.Configuration.ConfigurationManager.Connection ...
- IOS 阻止 锁屏
[UIApplication sharedApplication].idleTimerDisabled=YES;不自动锁屏 idleTimerDisabled
- 【转】内存耗用:VSS/RSS/PSS/USS
Terms VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的内存) RSS- Resident Set Size 实际使用物理内存(包含共享库占用的内存) PSS- Prop ...
- ELK-Stack 最后一次全篇文档
简介: ELK-Stack 日志收集系统.最后一次全篇记录的笔记,之后关于 ELK 的笔记都将是片段型.针对性的. 环境介绍: ELK-Stack:192.168.1.25 ( Redis.LogS ...
- Sqlserver2005中的varchar,varchar,char,nchar的比较
C#窗体中的TextBox 的MaxLength:与Nvarchar类似,不论是什么,最多只能为2.我我11我1
- Unity协程使用经验
[Unity协程使用经验] 1.协程的好处是,异步操作发起的地方和结束的地方可以统一在一个方法,这样就不用引入额外的成员变量来进行状态同步. 2.在一个协程中,StartCoroutine()和 yi ...


