68. 文本左右对齐

难度:困难
题目描述:
题目描述
示例
我的思路:
这题我做的思路很直观,但是没有什么技巧性可言,仅仅是代码的堆叠(变量、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

结果一:
结果一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值