[leedcode oj 6]ZigZag Conversion

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".

哈哈哈。。。最开始。。。根本就没看懂题。。。我就不承认我水,你来咬我啊

经过一通百度。。。终于。。。真相浮出水面

那货,原来叫做Z字形

辣么。。。好像就懂了

1        9                17

2     8 10         16 18

3   7   11     15     19

4 6     12 14         20

5        13              21

好了。。。就这样吧。。。

问题来了。。。是搞链表存,还是n*n的数组存。。。


第一个for循环,把所有竖着的字符全部加进了字符串里

第二个for循环,把所有斜着的字符全部加进了字符串里

string的加法,相当于连接

好高级的代码。。。


class Solution {
public:
    string convert(string s, int nRows) {
         if(nRows == 1) return s;
         string res[nRows];
         int i = 0, j, gap = nRows-2;
         while(i < s.size())
         {
             for(j = 0; i < s.size() && j < nRows; ++j) res[j] += s[i++];
             for(j = gap; i < s.size() && j > 0; --j) res[j] += s[i++];
         }
         string str = "";
         for(i = 0; i < nRows; ++i)
         str += res[i];
         return str;
    }
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值