zoukankan      html  css  js  c++  java
  • 边工作边刷题: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
    
  • 相关阅读:
    Editor HYSBZ
    MooFest POJ
    Monkey King HDU
    Haruna’s Breakfast HYSBZ
    数颜色 HYSBZ
    Mato的文件管理 HYSBZ
    小Z的袜子(hose) HYSBZ
    javascript类的简单定义
    json格式
    javascript call apply
  • 原文地址:https://www.cnblogs.com/absolute/p/5678277.html
Copyright © 2011-2022 走看看