难度:困难
题目描述:
我的思路:
这题我做的思路很直观,但是没有什么技巧性可言,仅仅是代码的堆叠(变量、while、if、for etc.)没有数据结构可以在这里说,也没有算法可以在这聊,就是简简单单的耗时长,代码长,错误多的典型做题反面教材。具体思路就不在这献丑了,代码中注释看吧。接下来这题肯定要看别人的题解,学习一下,把自己的代码尽量缩短。
题解一:
class Solution:
def fullJustify(self, words: List[str], maxWidth: int) -> List[str]:
#总体思路:先分割word到每一行,然后将每一行的剩余空格分配给每个单词后面
#一个困难题就被我这样用笨法子做了出来
tmpLine = []
tmpLen = 0
res = []
for word in words:
tmpLine.append(word)
tmpLen += len(word)
#每次为当前行添加单词,如果超出了长度就开始处理这一行
if tmpLen > maxWidth:
tmpLine.pop()
tmpLen -= len(word)
#处理分两步,
#第一步:分配空格
tmpSpace = [" "] * len(tmpLine)
tmpSpace[-1] = ""
i = 0
leave = maxWidth - tmpLen + 1#多余的为最后一个单词后面的空格
while leave > 0:
i = i % (len(tmpSpace) - 1) if len(tmpSpace) > 1 else 0
tmpSpace[i] += " "
leave -= 1
i += 1
#第二步:转换成字符串
tmpRes = ""
for i in range(len(tmpSpace)):
tmpRes += tmpLine[i]
tmpRes += tmpSpace[i]
res.append(tmpRes)
tmpLine = [word]
tmpLen = len(word)
tmpLen += 1
#处理所有的以后,如果有剩余,处理剩余(也就是最后一行)
last = ""
for word in tmpLine:
last += word
if len(last) < maxWidth:
last += " "
if maxWidth-len(last) > 0:
last += " "*(maxWidth-len(last))
res.append(last)
return res