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
    
  • 相关阅读:
    C++数组释放问题
    C# 线程与进程
    Inspector面板Debug模式
    Unity实现汉诺塔游戏
    Unity中的销毁方法
    如何修改Unity中脚本模板
    序列帧动画
    Unity中的射线和射线图层过滤使用方法
    简单第一人称射击游戏
    C# 集合和泛型
  • 原文地址:https://www.cnblogs.com/absolute/p/5678277.html
Copyright © 2011-2022 走看看