马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 有奶就是娘 于 2023-3-24 14:40 编辑
在leetcode刷题,第六题
题目如下
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 N 字形排列。
比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:
P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。
看到了一种解法,有一句看不懂,第8行class Solution:
def convert(self, s: str, numRows: int) -> str:
n = numRows + numRows - 2 #每组数据的个数
res = ['']*numRows
if numRows ==1 :
return s
for i, c in enumerate(s):
res[min(idx := i%n,n - idx)] +=c
return ''.join(res)
第 8 行是使用了 Python 3.8 引入的赋值表达式(Assignment Expressions)特性,又称为 "海象运算符"(walrus operator),用于在表达式中进行赋值。
解释一下这个解法中的第 8 行代码:
res[min(idx := i % n, n - idx)] += c
i % n 是将当前字符的索引 i 对 n 取模,这里的 n 是 a,即每组数据的个数。通过这种计算方式,我们可以得到当前字符在一个 "N" 字形组中的相对位置。
使用赋值表达式 (idx := i % n),我们将计算得到的相对位置赋值给变量 idx。这样,我们可以在表达式中继续使用这个值。
min(idx, n - idx) 这部分代码是用来计算字符在 res 列表中的索引。这个索引值决定了字符在 "N" 字形排列中的行数。例如,在给定的例子中,"A" 在 "N" 字形排列的第 0 行,"P" 在第 1 行,"Y" 在第 2 行。
最后,res[min(idx, n - idx)] += c 会将当前字符 c 追加到对应行索引的字符串中。在循环结束后,res 列表包含了所有按行排列的字符串。
|