首页 > 其他 > 详细

6 ZigZig Conversion[M]Z字形变换

时间:2019-06-09 14:58:23      阅读:113      评论:0      收藏:0      [点我收藏+]

题目

给定一个字符串,按指定行数,以从上往下、从左往右进行Z字形排列。
举例:

Input: s= "ABCDEFGHIJKLMNOP",  numRows = 4,
Output:AGMBFHLNCEIKODJP
Explanation:
           A    G    M
           B  F H  L N
           C E  I K  O
           D    J    P

思路:

先将字符串\(s\)进行Z字排列,再按行读取字符。将Z字分为上中下三个部分,则例子的Z上:ABCD,中:EF,下:GHIJ。分析其规律可以发现,对于指定的行数\(n\),中部的个数为\(n-2\),将每一个上+中作为一个循环,则循环周期为\(t=n+n-2\)。于是有
第1行:\(s[0], s[0+t],s[0+2 \cdot t], \cdots ;\)
第2行:\(s[1], s[0+t-1],s[1+t],\cdots;\)
\(\cdots\)
\(n\)行:\(s[n-1],s[n-1+t],s[n-1+2 \cdot t]\cdots .\)

代码:

  • C++
class solution{
public:
  string convert(string s, int numRows){
    if(s.size()==1) return s;
    string resString;
    int stringLen=s.size();
    int cycleLen=2*numRows-2;

    for(int i=0;i<numRows;i++){
      for(int j=0;j+i<stringLen;j+=cycleLen){
        resString += s[i+j];
        if(i !=0 && i != numRows-1 && j+cycleLen-i < stringLen){
         resString+=s[j + cycleLen - i];
      }
    }
    return resString;
  }
};
  • python
def covert

6 ZigZig Conversion[M]Z字形变换

原文:https://www.cnblogs.com/Jessey-Ge/p/10993428.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!