6.N 字形变换

6.N 字形变换

6.N 字形变换_第1张图片

class Solution {
public:
    string convert(string s, int numRows) {
        size_t size = s.size();
        if (numRows == 1) return s;
        int index = 0;
        string result;
        
        int delta = (numRows-1) *2;
        while (index < size) {
            result += s[index];
            index += delta;
        }

        for (int i = 0 ; i < numRows -2 ; ++i) {
            delta -= 2;
            int delta1 = delta;
            int delta2 = (numRows-1)*2 - delta1;
            index = i + 1;
            while (index < size) {
                result += s[index];
                index += delta1;
                if (index < size) {
                    result += s[index];
                    index += delta2;
                }
            }
        }
        
        delta = (numRows-1) *2;
        index =  numRows-1;
        while (index < size) {
            result+=s[index];
            index += delta;
        }
        return result;
    }
};

没什么好说的,找规律,
第一行和最后一行的是 delta = (numRows-1) *2;
中间的行是 delta1 = delta(比第一行少2); delta2 = (numRows-1)*2 - delta1

你可能感兴趣的:(重新找工作--刷题篇,c++,算法)