字形变换(简单模拟和按列访问)
程序员文章站
2022-06-16 18:01:36
6. Z 字形变换题目链接这道题直接简单模拟,先放进一个二维数组然后按行访问数组即可。官方题解:用的按行排序和按行访问由于官方没有python版本,我这里给出官方题解的python版本简单模拟方法:class Solution {public: string convert(string s, int numRows) { if(numRows == 1) return s; vector&g...
6. Z 字形变换
题目链接
这道题直接简单模拟,先放进一个二维数组然后按行访问数组即可。
官方题解:用的按行排序和按行访问
由于官方没有python版本,我这里给出官方题解的python版本
简单模拟方法:
class Solution {
public:
string convert(string s, int numRows) {
if(numRows == 1) return s;
vector<vector<char>> v(numRows);
int j = 0, i = 0;
int flag = 1;//flag控制方向
while(i < s.size())
{
v[j].push_back(s[i]);
i++;
if(j >= numRows-1)//到达边界改变方向
flag = 0;
if(j <= 0) flag = 1;
if(flag == 1)
j++;//向下则加
else j--; //向上则减
}
string ans = "";
for(int i = 0; i < numRows; i++)
{
for(int j = 0; j < v[i].size(); j++)
{
ans += v[i][j];//按行访问二维数组
}
}
return ans;
}
};
python3按行排序:
class Solution:
def convert(self, s: str, numRows: int) -> str:
if numRows == 1:
return s
list1 = ['']*numRows
curRow = 0
goingDown = False
for c in s:
list1[curRow] += c
if curRow == 0 or curRow == numRows-1:
goingDown = not goingDown
curRow += 1 if goingDown else -1
ans = ''
for row in list1:
ans += row
return ans
python3按行访问:
class Solution:
def convert(self, s: str, numRows: int) -> str:
if numRows == 1:
return s
ret = ''
n = len(s)
cycleLen = 2*numRows - 2
for i in range(0, numRows):
for j in range(0, n-i, cycleLen):
ret += s[j+i]
if i != 0 and i != numRows - 1 and j + cycleLen - i < n:
ret += s[j + cycleLen - i]
return ret
如果对你有帮助的话,请点个赞哦!
本文地址:https://blog.csdn.net/qq_41946404/article/details/109880328
下一篇: 集成运放组成的基本运算电路