面试经典 150 题 21 —(数组 / 字符串)— 6. N 字形变换

6. N 字形变换

面试经典 150 题 21 —(数组 / 字符串)— 6. N 字形变换_第1张图片

方法一
class Solution {
public:
    string convert(string s, int numRows) {
        int sLength = s.length();

        if(numRows == 1 || numRows>=sLength){
            return s;
        }

        int colNum = ceil(sLength*1.0/(2*numRows-2))*(numRows-1);
        vector<string> mat(numRows,string(colNum,0));

        for(int i = 0,x=0,y=0;i<sLength;i++){
            mat[x][y] = s[i];
            if(i%(2*numRows-2)<numRows-1){
                x++;
            }
            else{
                x--;
                y++;
            }
        }

        string result;

        for(string row : mat){
            
            for(char ch : row){
                if(ch){
                    result += ch;
                }
            }
        }

        // vector > mat(numRows,vector(colNum,0));

        // int m = mat.size(),n = mat[0].size();
        // for(int i = 0; i < m; i++){
        //     for(int j = 0; j < n; j++){
        //         if(mat[i][j]){
        //             result += mat[i][j];
        //         }
        //     }
        // }
        return result;
    }
};
class Solution {
public:
    string convert(string s, int numRows) {
        if (numRows < 2)
            return s;
        vector<string> rows(numRows);
        int i = 0, flag = -1;
        for (char c : s) {
            rows[i].push_back(c);
            if (i == 0 || i == numRows -1)
                flag = - flag;
            i += flag;
        }
        string res;
        for (const string &row : rows)
            res += row;
        return res;
    }
};

作者:Krahets
链接:https://leetcode.cn/problems/zigzag-conversion/solutions/21610/zzi-xing-bian-huan-by-jyd/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(leetcode,c++,leetcode,算法)