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

class Solution {
public:
    
    string convert(string s, int numRows) {
        /*
        对于第k行[0...numRows-1],
        若当前方向是向上,则下一次字符为当前位置+2*k【注意k=0的特殊情况】
        若当前方向是向下,则下一次字符为当前位置+2*(numRows-1-k)【注意k=numRows-1的特殊情况】
        对于下一字符不变的跳过即可
        【注意第一行和最后一行可能重合,若不进行处理会导致TL】
        */
        if(numRows==1) return s;//第一行和最后一行重合的情况
        string ans;
        for(int k=0;k<numRows;++k){
            int idx=k;
            int next=numRows-1-k;//代表方向,开始方向总是向下的
            while(idx<s.size()){
                ans.push_back(s[idx]);
                if(next==0) 
                    next=numRows-1-next;///改变方向
                idx += 2*next;
                next=numRows-1-next;///改变方向
            }
        }
        return ans;
    }
};
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。