[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 ...
随机推荐
- 超越Google,腾讯推出自研图片编码格式TPG
近日,记者从国家知识产权局了解到,腾讯公司正式向国家知识产权局提交了一份关于图片编码技术的专利申请.此项专利被命名为TPG(Tiny Portable Graphics),在数据上TPG图片格式产生的 ...
- deep learning and machine learning
http://blog.csdn.net/xiangz_csdn/article/details/54580053
- 动态添加一列到DataTable的第一列
dt.Columns.Add("ROWNUM", typeof(Int64));dt.Columns["ROWNUM"].SetOrdinal(0);
- js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
1.工厂模式 function a(name){ var b = new object(); b.name = name; b.say = function(){ alert(this.name); ...
- java算法 蓝桥杯 摆花
问题描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时 ...
- Lucene的查询及高级内容
Lucene查询 基本查询: @Test public void baseQuery() throws Exception { //1. 创建查询的核心对象 FSDirectory d = FSDir ...
- 使用vue-cli创建一个vue项目
安装vue-cli npm install -g @vue/cli 1, 使用vue创建一个项目 vue create luffy 2, 安装所需的插件 npm install vue-router ...
- mysql-5.6.24-win32解决没有my.ini并且修改编码
3.配置环境变量:新建一个系统变量: MYSQL_HOME, 值:D:\MySql\mysql5611 //这一步不做也行 4.修改MySql启动配置文件: 将安装目录下文件:my-default. ...
- 知方可补不足~Sqlserver中的几把锁和.net中的事务级别 回到目录
当数据表被事务锁定后,我们再进行select查询时,需要为with(锁选项)来查询信息,如果不加,select将会被阻塞,直到锁被释放,下面介绍几种SQL的锁选项 SQL的几把锁 NOLOCK(不加锁 ...
- 8-全排列next_permutation
C++中全排列函数next_permutation 用法 转载 2017年03月29日 14:38:25 1560 全排列参考了两位的博客 感谢! http://blog.sina.com.cn/s/ ...