前言

 

【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的更多相关文章

  1. leetcode题解||ZigZag Conversion问题

    problem: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of r ...

  2. LeetCode题解——ZigZag Conversion

    题目: 把一个字符串按照Z型排列后打印出来,例如 "PAYPALISHIRING" 重新排列后为3行,即 P A H N A P L S I I G Y I R 那么输出为&quo ...

  3. LeetCode 6. ZigZag Conversion & 字符串

    ZigZag Conversion 看了三遍题目才懂,都有点怀疑自己是不是够聪明... 就是排成这个样子啦,然后从左往右逐行读取返回. 这题看起来很简单,做起来,应该也很简单. 通过位置计算行数: P ...

  4. Leetcode 6. ZigZag Conversion(找规律,水题)

    6. ZigZag Conversion Medium The string "PAYPALISHIRING" is written in a zigzag pattern on ...

  5. LeetCode 6 ZigZag Conversion 模拟 难度:0

    https://leetcode.com/problems/zigzag-conversion/ The string "PAYPALISHIRING" is written in ...

  6. LeetCode 6 ZigZag Conversion(规律)

    题目来源:https://leetcode.com/problems/zigzag-conversion/ The string "PAYPALISHIRING" is writt ...

  7. [LeetCode][Python]ZigZag Conversion

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com'https://oj.leetcode.com/problems/zigzag- ...

  8. LeetCode——6. ZigZag Conversion

    一.题目链接:https://leetcode.com/problems/zigzag-conversion/description/ 二.题目大意: 给定一个字符串和一个数字,将其转换成Zigzag ...

  9. 蜗牛慢慢爬 LeetCode 6. ZigZag Conversion [Difficulty: Medium]

    题目 The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows li ...

随机推荐

  1. IE6中PNG图片背景无法透明显示的最佳解决方案

    我想,对于像我这样的年轻的程序员来说,做网页开发时用chrome.firefox或者ie10什么的大约是被宠坏了.所以当最近做的项目不得不在恐龙化石般的ie6上运行时,ie6种种诡异的行径简直让我发指 ...

  2. 跟我学算法聚类(kmeans)

    kmeans是一种无监督的聚类问题,在使用前一般要进行数据标准化, 一般都是使用欧式距离来进行区分,主要是通过迭代质心的位置 来进行分类,直到数据点不发生类别变化就停止, 一次分类别,一次变换质心,就 ...

  3. Asp.Net 自定义 httpmodel 中间件 管道

    https://msdn.microsoft.com/en-us/library/aa719858(v=vs.71).aspx http://www.cnblogs.com/jimmyzhang/ar ...

  4. sublime 安装插件

    安装Package Control 在安装插件之前,需要让sublime安装Package Control.打开Sublime Text的控制台,快捷键ctrl + ~,在控制台中输入以下代码. im ...

  5. Docker入门命令备份

    1.安装Docker curl -sSL https://get.docker.com/ | sh 2.将当前用户加入Docker用户组,这样就不用每次执行docker 命令时加上sudo了 3.查看 ...

  6. CBCentralManager Class 的相关分析

    Overview 总体概述 CBCentralManager objects are used to manage discovered or connected remote peripheral ...

  7. MySQL数据库篇之数据类型

    主要内容: 一.数值类型 二.日期类型 三.字符串类型 四.枚举类型与集合类型 1️⃣ 数值类型 1.整数类型:tinyint  smallint  mediumint  int  bigint 作用 ...

  8. java 内存溢出

    不健壮代码的特征及解决办法 1.尽早释放无用对象的引用.好的办法是使用临时变量的时候,让引用变量在退出活动域后,自动设置为null,暗示垃圾收集器来收集该对象,防止发生内存泄露. 对于仍然有指针指向的 ...

  9. How to map host ip and port to Hyper-V

    1.1       Add an port proxy netsh interface portproxy add v4tov4 listenport=hostport listenaddres=ho ...

  10. 前端中this的用法

    this指的是方法下的所有参数 handleDelete(record){ this.XXX.AAA (这个this.XXX指的是handleDelete这个方法的所有参数) (let self = ...