68. 文本左右对齐

难度:困难
题目描述:
68. 文本左右对齐_第1张图片
68. 文本左右对齐_第2张图片
我的思路:
这题我做的思路很直观,但是没有什么技巧性可言,仅仅是代码的堆叠(变量、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

结果一:
68. 文本左右对齐_第3张图片

你可能感兴趣的:(朱滕威的面试之路)