我の解
感覺就是找規律欸,雖然一開始我並沒有看懂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];
}
};