Z字形变换

将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数:

P   A   H   N
A P L S I I G
Y   I   R

之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"

实现一个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入: s = "PAYPALISHIRING", numRows = 3
输出: "PAHNAPLSIIGYIR"

示例 2:

输入: s = "PAYPALISHIRING", numRows = 4
输出: "PINALSIGYAHRPI"
解释:

P     I    N
A   L S  I G
Y A   H R
P     I

 

个人AC答案

模拟轨迹

class Solution {
public:
    string convert(string s, int numRows) {
        vector> v(numRows, vector(s.size(), 0));
        if(numRows == 1) return s;
        int x = 0, y = 0;
        bool flag = true;
        
        for(int i = 0; i < s.size(); i++)
        {
            if(flag)
            {
                v[x][y] = s[i];
                x++;
            }
            else
            {
                y++;
                x--;
                v[x][y] = s[i];
            }
            if(x == v.size())
            {    
                flag = false;
                x--;
            }
            if(!flag && x == 0)
            {    
                flag = true;
                x++;
            }
        }
        
        string ret;
        
        for(int i = 0; i < v.size(); i++)
            for(int j = 0; j < v[0].size(); j++)
                if(v[i][j])
                    ret += v[i][j];
        return ret;
    }
};

想了想感觉很蠢 然后就有了

个人AC答案.改

class Solution {
public:
    string convert(string s, int numRows) {
        vector v(numRows);
        if(numRows == 1) return s;
        int x = 0;
        bool flag = true;
        
        for(int i = 0; i < s.size(); i++)
        {
            if(flag)
            {
                v[x] += s[i];
                x++;
            }
            else
            {
                x--;
                v[x] += s[i];
            }
            if(x == v.size())
            {    
                flag = false;
                x--;
            }
            if(!flag && x == 0)
            {    
                flag = true;
                x++;
            }
        }
        string ret;
        for(int i = 0; i < v.size(); i++)
            ret += v[i];
        return ret;
    }
};

 

你可能感兴趣的:(Z字形变换)