def blank(n: int) -> str:
return " " * n
class Solution:
def fullJustify(self, words: List[str], maxWidth: int) -> List[str]:
ans = []
#right记录当前行最右边在words中的序号
right, n = 0, len(words)
while True:
#刚开始left=right
left = right
#这一行的单词长度之和
sumLen = 0
#right < n:right不能越界
#right - left表示单词之间至少一个空格,加起来不能大于maxWidth
while right < n and sumLen + len(words[right]) + right - left <= maxWidth:
sumLen += len(words[right])
right += 1
#那么当前行一定为最后一行
if right == n:
#单词之间隔一个空格,第一个字母前面没有空格
s = " ".join(words[left:])
ans.append(s + blank(maxWidth-len(s)))
break
#当前行,单词个数
numWords = right - left
#除单词之外的空格数
numSpaces = maxWidth - sumLen
#如果该行只有一个单词
if numWords == 1:
ans.append(words[left] + blank(numSpaces))
continue
#当前行不只一个单词
#平均每个单词之间的空格数,numWords - 1为有几个空隙
avgSpaces = numSpaces // (numWords - 1)
#多出来的空格数,不能平均的
extraSpaces = numSpaces % (numWords - 1)
#有额外空格数,所以需要有额外extraSpaces个单词后面要加一个空格,所以为left:left + extraSpaces + 1
s1 = blank(avgSpaces + 1).join(words[left:left + extraSpaces + 1])
s2 = blank(avgSpaces).join(words[left + extraSpaces + 1:right])
ans.append(s1 + blank(avgSpaces) + s2)
return ans
09-09
389
12-10
5197