Leetcode-6 Z字形变换

题目链接

我の解

感觉就是找规律欸,虽然一开始我并没有看懂Z是个啥。与其说是Z,我觉得是个L变换。
如图所示,红色的为一组,利用numRows可算出组的大小。
对于每一个s[i]计算它所在的行数,开一个vector<string>数组,将s[i]加入str[行]。
最终将每一行加起来得到结果。

在这里插入图片描述

class Solution {
public:
    string convert(string s, int numRows) {
        if(numRows<=1) return s;
        vector<string> str(numRows,"");
        int part=numRows*2-2;
        int index;
        for(int i=0;i<s.length();i++)
        {
            if(i%part<numRows)
                index=i%part;
            else
                index=numRows*2-i%part-2;
            str[index]+=s[i];
        }
        for(int i=1;i<str.size();i++)
        {
            str[0]+=str[i];
        }
        return str[0];
    }
};

参考题解

当字符填在0和n-1行时发生转折

class Solution {
public:
    string convert(string s, int numRows) {
        if(numRows<=1) return s;
        vector<string> str(numRows,"");
        bool godown=true;
        int level=0;
        for(int i=0;i<s.length();i++)
        {
            str[level]+=s[i];
            level=godown?level+1:level-1;
            if(level==0||level==numRows-1)
                godown=!godown;
            
        }
        for(int i=1;i<str.size();i++)
        {
            str[0]+=str[i];
        }
        return str[0];
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章