• 边工作边刷题:70天一遍leetcode: day 38-1


    Letter Combinations of a Phone Number

    这题iterate方法的基本思路就是连续做+1,+1的含义就是移动同一数字对应字母下一个index处。算法是两层循环,外层是每一个输出,内层是一个数的每一位。难点是循环的invariant:外层是carry!=1,因为如果内层循环最高位仍有进位说明已经过了最后一个对应string。内层从低到高遍历每一位,但如果carry变为0,要break中止。

    错误点

    class Solution(object):
        def letterCombinations(self, digits):
            """
            :type digits: str
            :rtype: List[str]
            """
            def getOneRes(indices):
                res = []
                for i in range(len(indices)):
                    res.append(dmap[ord(digits[i])-ord('0')][indices[i]])
                return ''.join(res)
            
            if not digits: return []
            dmap = ["", "", "abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"]
            indices = [0]*len(digits)
            carry = 0
            res = []
            while not carry:
                res.append(getOneRes(indices))
                for i in range(len(digits)-1, -1, -1):
                    indices[i] += 1
                    if indices[i]==len(dmap[ord(digits[i])-ord('0')]):
                        indices[i]=0
                        carry=1
                    else:
                        carry=0
                        break
                
            
            return res
    
  • 相关阅读:
    ac与ap同步分析
    ipsec原理(转载)
    Sublime Text自定制代码片段(Code Snippets)
    IPsec分析/测试/
    jQuery 学习
    windows pip 安装 转载
    转载 pep8安装
    转载别人的ftp,觉得目录结构不错,学习
    博客园 CSS 代码定制
    AC自动机
  • 原文地址:https://www.cnblogs.com/absolute/p/5678277.html
Copyright © 2020-2023  润新知