我正在尝试解决以下问题:
将字符串“ PAYPALISHIRING”以Z字形写在给定的行数上,如下所示:(您可能希望以固定的字体显示此图案以提高可读性)
P A H N
A P L S I I G
Y I R
然后逐行读取:“ PAHNAPLSIIGYIR”
编写代码,该代码将接收字符串并在给定行数的情况下进行此转换:
string convert(string s,int numRows);
我编写了以下代码,但是粗体字出现错误 “ TypeError:+不支持的操作数类型:“ NoneType”和“ unicode””
class Solution(object):
def convert(self, s, numRows):
"""
:type s: str
:type numRows: int
:rtype: str
"""
if numRows==1:
return s
templist=[None]*numRows
ret=" "
curRow=0
goingDown=0
for each_char in s:
if templist[curRow]:
templist[curRow]=each_char
else:
**templist[curRow]=templist[curRow] + each_char**
if (curRow==numRow-1 or curRow == 0):
goingDown = not goingDown
if goingDown:
curRow=curRow+1
else:
curRow=curRow-1
for each_str in templist:
ret=ret+each_str
print ret
我在这方面做错了吗?如果有人可以在这里指出问题,那就太好了。 预先感谢
答案 0 :(得分:1)
您的情况似乎在以下几行中得到了逆转:
if templist[curRow]:
templist[curRow]=each_char
else:
**templist[curRow]=templist[curRow] + each_char**
它应该显示为:
if templist[curRow]:
templist[curRow]=templist[curRow] + each_char
else:
templist[curRow]=each_char
这可确保仅在该字符串已经存在(不存在templist[curRow]
)时才追加到None
中的字符串,从而避免将字符串添加到None
的错误。 / p>
一个更好的方法可能是设置templist = [""] * numRows
,即一个空字符串列表,然后仅使用templist[curRow] += each_char
对其进行添加,因为您可以在一个空字符串中添加一个字符,所以它将一直有效。
答案 1 :(得分:0)
是的,您做错了事。
第templist=[None]*numRows
行使您的templist
变量包含一堆None
。然后,您继续使用其中的None
个,并尝试使用粗体的语句将其中一个“添加”到字符串中:templist[curRow]=templist[curRow] + each_char
(即,该赋值的右侧为到None + each_char
)。
您无法在Python中添加字符串和None
,因此会出现错误。