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

leetcode 6. ZigZag Conversion

时间:2016-08-13 21:12:53      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

https://leetcode.com/problems/zigzag-conversion/

题目: 将字符串转化成zigzag模式。

例如 "abcdefghijkmlnpq" 

当为4行,zigzag模式为:

a    g    l
b f h m n
c e i k   p
d   j      q
输出为aglbfhmnceikpdjq
当为5行,zigzag模式为:
a    i
b h j q
c g k p
d f l  n
e   m
输出为aibhjqcgkpdflnem

思路:以题目中当行为4的为例,将字符串"abcdefghijkmlnpq" 首先转换为"abcd/fe/ghij/km/lnpq".其实/代表空格。这样最后的输出就从以span=4,从j=0开始a/g/l. 再从j=1开始bfhmn,...,一直到j=4,d/j/q.其中去掉/。

所以首先需要将原字符串转换为用空格填充的字符串。从上面的例子可以看出规则。首先是numRows个字符为一列,然后numRows-2个字符为反序的一列,其上下各有一个空格。

 1 class Solution {
 2 public:
 3     string convert(string s, int numRows) {
 4         int i=0,k=0,j;
 5         int len=s.length();
 6         string ss="";
 7         int flag=0;
 8         while(i<len){
 9             j=numRows-flag;
10             if(flag==0){
11               while(i<len&&j>0&&j--){
12                ss+=s[i++];
13               }
14               while(j>0&&j--){
15                 ss+= ;
16               }
17               flag=2;
18             }
19             else {
20                 ss+= ;
21                 string temp="";
22                 while(i<len&&j>0&&j--){
23                     temp+=s[i++];
24                 }
25                 std::reverse(temp.begin(),temp.end());
26 27 while(j>0&&j--){ 28 ss+= ; 29 } 30 ss+=temp; 31 ss+= ; 32 flag=0; 33 } 34 } 35 string s1=""; 36 k=ss.length(); 37 for(i=0;i<numRows;i++){ 38 j=i; 39 while(j<k){ 40 if(ss[j]!= ) 41 s1+=ss[j]; 42 j+=numRows; 43 } 44 } 45 return s1; 46 } 47 };

leetcode上运行时间为 24ms

leetcode 6. ZigZag Conversion

标签:

原文地址:http://www.cnblogs.com/aiheshan/p/5768801.html

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