Skip to content

Commit a628a44

Browse files
committed
Z字形变换
1 parent 04e5f6a commit a628a44

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

6、Z字形变换/file_code.py

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
from collections import defaultdict
2+
3+
class Solution:
4+
def convert(self, s: str, numRows: int) -> str:
5+
if s == '' or numRows == 1:
6+
return s
7+
len_str = len(s)
8+
base = 2*(numRows-1)
9+
nums = len_str // base
10+
base_ind = [x for x in range(numRows)]
11+
12+
minis = len_str % base
13+
print(nums)
14+
print(base_ind)
15+
print(base)
16+
print(minis)
17+
arr = defaultdict(list)
18+
for i in range(nums):
19+
for j in base_ind:
20+
if j in [base_ind[-1], base_ind[0]]:
21+
arr[j].append(j+base*i)
22+
else:
23+
arr[j].extend([j+base*i, j+base*(i+1)-2*j])
24+
25+
flag = nums * base
26+
if minis != 0:
27+
if minis // numRows == 0:
28+
for i in range(0, minis):
29+
arr[i].append(flag+i)
30+
else:
31+
for i in range(0, numRows):
32+
arr[i].append(flag+i)
33+
for i, val in enumerate(range(flag+numRows, len_str), 1):
34+
arr[numRows-i-1].append(val)
35+
print(val)
36+
37+
arr_str = defaultdict(list)
38+
for k in arr.keys():
39+
for i in arr[k]:
40+
arr_str[k].append(s[i])
41+
42+
return ''.join([''.join(val) for val in arr_str.values()])
43+
44+
45+
46+
if __name__ == "__main__":
47+
solution = Solution()
48+
string = 'LEETCODEISHIRING'
49+
numRows = 4
50+
# result = 'LCIRETOESIIGEDHN'
51+
52+
'''
53+
string = 'LEETCODEISHIRING'
54+
numRows = 3
55+
# result = 'LDREOEIIECIHNTSG'
56+
'''
57+
result = solution.convert(string, numRows)
58+
59+
print(result)

0 commit comments

Comments
 (0)