[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 ...
随机推荐
- 【开发工具】Jenkins+Gitlab实现自动化部署
我在尝试在容器中安装Jenkins时,初衷是希望使用docker in docker 的模式来实现Jenkins slave容器按需创建.在实现的时候需要在Jenkins 中安装Kubernetes插 ...
- 在EXCEL中使用SQL语句查询
SQL语句在数据库使用中十分重要. 在EXCEL中可以不打开工作簿,就获取数据,对多工作簿操作很用,也很快. 对大量数据处理,比循环快很多,但是比词典方法还有点距离(可惜我还没有学会词典). 对数据库 ...
- Struts2 配置Action详解
Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实 ...
- 【转】运输层TCP协议详细介绍
TCP是TCP/IP协议族中非常复杂的一个协议.它具有以下特点: 1:面向连接的运输层协议.在使用TCP协议之前,首先需要建立TCP连接.传送数据完毕后,必须释放已经建立的TCP连接. 2:一条TCP ...
- fastjson集合转字符串
JSON.toJSONString(list, SerializerFeature.DisableCircularReferenceDetect); list为集合
- Redis搭建(六):Redis持久化配置
一.介绍 Redis的持久化有2种方式: Rdb快照 Aof日志 1. Rdb快照的配置选项 save 900 1 // 900内,有1条写入,则产生快照 save 300 1000 // 如果300 ...
- centos7 更新源 安装ifconfig
centos7最小化安装后,ifconfig是不可用的,可以使用ip addr或ip link查看网络信息. 更新源之前,先确定网络是否连通.我用的虚拟机,因为桥接受公司ip限制,换成了NAT模式,确 ...
- 刷题向》关于一道尺取法的神题目(BZOJ4653)(HARD-)(BZOJ 30题纪念)
不得不说,这也许会是一道长期在我的博客里作为“HARD”难度存在的题 这道题能很好的考验选手的思考能力,但本蒟蒻最后还是听了省队爷讲了之后才会...(默默面壁) 题目里,说对于每一个点,是用当前选出的 ...
- 关于oraclize使用最好的一篇文章
https://medium.com/@msolomon44/using-apis-in-your-ethereum-smart-contract-with-oraclize-95656434292e ...
- java的web配置文件的“<load-on-startup>的说明[转]
<servlet> <servlet-name>log4jInitServlet</servlet-name> <servlet-class>org.s ...


