码迷,mamicode.com
首页 > 其他好文 > 详细

【LeetCode】006 ZigZag Conversion

时间:2015-04-29 21:25:41      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

题目:LeetCode 006 ZigZag Conversion

题意:给一个字符串"PAYPALISHIRING" 按照ZigZag的形式,即按照下面的顺序排列,然后

 技术分享

在转换成一行一行的读取方式,得到"PAHNAPLSIIGYIR"。其中行数不定。

 

思路:肯定是不能去开一个二维数组的,必须要找出规律来直接输出。发现间隔是和总行数numRows有关,另外,第一行和最后一行需要单独考虑,每两个字符间隔一致,为2*(numRows-1);其余行有两种间隔,设当前为第L行,则第一个间隔为2*(numRows-L),第二个间隔为2*(L-1)。

但是这样我提交后MLE,又是没有考虑特殊情况也是醉了。如果numRows = 1,则单独将第一行和最后一行提出来会出错,只需要返回原字符串即可。

 

代码如下:

 1 class Solution {
 2 public:
 3     string convert(string s, int numRows) {
 4         if(numRows == 1) return s;
 5 
 6         string ans = "";
 7         int len = s.size();
 8         
 9         int now = 0;
10         while(now < len)
11         {
12             ans += s[now];
13             now += 2*(numRows-1);
14         }
15 
16         for(int i = 2; i < numRows; i++)
17         {
18             now = i-1;
19             while(now < len)
20             {
21                 ans += s[now];
22                 now += 2*(numRows-i);
23                 if(now < len)
24                 {
25                     ans += s[now];
26                     now += 2*(i-1);
27                 }
28                 else break;
29             }
30         }
31         now = numRows-1;
32         while(now < len)
33         {
34             ans += s[now];
35             now += 2*(numRows-1);
36         }
37         return ans;
38     }
39 };

 

【LeetCode】006 ZigZag Conversion

标签:

原文地址:http://www.cnblogs.com/kathyrine/p/4466963.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!