【LeetCode】6 ZigZag Conversion

题目链接

ZigZag Conversion

分析

按行来处理,判断每行的字符在原输入字符串中的距离。
首尾行和中间行情况不同,要分开处理。

几个特殊的case:

(1)s为空
(2)s.size() <= numRows

代码

    class Solution {
    public:
        string convert(string s, int numRows) {   
            if(s.size()==0){
                return "";
            }
            if(numRows==1 || s.size()==numRows){
                return s;
            }  
            int i, group;
            group = numRows*2 - 2;
            string str = "";
            int step = group, last=0;
            for(i=0; i<numRows; i++){
                int tmp = step;
                for(int j=last++; j<s.size(); ){
                    str += s[j];    
                    if(i==0 || i==numRows-1){
                        j += step;
                    }else{
                        j += tmp;
                        tmp = group - tmp;
                    }                   
                }            
                if(step==2){
                    step = group;
                }else{
                    step -= 2;
                }           
            }             
            return str;
        }
    };

你可能感兴趣的:(LeetCode)