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

ZigZag Conversion

时间:2015-03-05 10:33:16      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

将一个字符串按照ZIGZAG方式打印,举例说明

  1. ///nRows:2
  2. ///1, 3, 5 step: 2
  3. ///2, 4, 6 step: 2
  4. ///
  5. ///nRows:3
  6. ///1, 5, 9 step: 4
  7. ///2, 4, 6, 8, 10 step:2 2
  8. ///3, 7, 11 step: 4
  9. ///
  10. ///nRows:4
  11. ///1, 7, 13 step: 6
  12. ///2, 6, 8, 12, 14 step:4 2
  13. ///3, 5 9, 11, 15 step:2 4
  14. ///4, 10, 16 step: 6
  15. ///
  16. ///nRows:5
  17. ///1, 9, 17 step: 8
  18. ///2, 8, 10, 16, 18 step:6 2
  19. ///3, 7, 11, 15, 19 step:4 4
  20. ///4, 6, 12, 14, 20 step:2 6
  21. ///5, 13, 21 step: 8
  22. ///

注意点

  • 首尾步长都是(n-1)*2,中间部分的步长变化是(n-i-1)*2和i*2,所以我是首尾与中间部分进行了分别处理
  • 要防止越界,tempLoca+i<s.size()和tempLoca<s.size()
  • 要注意空串和n==1的特殊情况
  • 老兔子代码写太烂,上面一些注意点有可能进行统一处理,^_^
  1. class Solution {
  2. public:
  3. string convert(string s, int nRows) {
  4. string res=s;
  5. if(s != "" & nRows != 1)
  6. {
  7. int location=0;
  8. int tempLoca = 0;
  9. while(tempLoca<s.size())
  10. {
  11. res[location++] = s[tempLoca];
  12. tempLoca += (nRows-1)*2;
  13. }
  14. for(int i=1; i<nRows-1; i++)
  15. {
  16. tempLoca = 0;
  17. for(int j=0;tempLoca+i<s.size();j++)
  18. {
  19. res[location++] = s[i+tempLoca];
  20. tempLoca += j&1?i*2:(nRows-i-1)*2;
  21. }
  22. }
  23. tempLoca = nRows-1;
  24. while(tempLoca<s.size())
  25. {
  26. res[location++] = s[tempLoca];
  27. tempLoca += (nRows-1)*2;
  28. }
  29. }
  30. return res;
  31. }
  32. };




ZigZag Conversion

标签:

原文地址:http://www.cnblogs.com/flyjameschen/p/4314939.html

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