


我们可以使用贪心算法来解决这个问题。具体步骤如下:
-
维护两个变量:
-
lines:用于记录总共使用了多少行,初始化为 1。 -
width:用于记录当前行的已使用宽度,初始化为 0。
-
-
遍历字符串
S中的每个字符:-
获取该字符所需的宽度
w = widths[ord(c) - ord('a')]。 -
判断
width + w是否超过 100:-
若未超过,则累加
w到width。 -
若超过,则
lines增加 1,width重新赋值为w(新行开始)。
-
-
-
最后,返回
[lines, width],其中lines代表总行数,width代表最后一行的宽度。
代码实现:
def numberOfLines(widths, S):
lines = 1
width = 0
for c in S:
w = widths[ord(c) - ord('a')]
if width + w > 100:
lines += 1
width = w
else:
width += w
return [lines, width]
复杂度分析:
-
遍历
S一遍,时间复杂度为 O(N)(其中N为S的长度)。 -
仅使用了几个额外变量,空间复杂度为 O(1)。
这个方法高效地计算了所需的行数和最后一行的宽度。🚀
218

被折叠的 条评论
为什么被折叠?



