zoukankan      html  css  js  c++  java
  • LeetCode 第17题--*的组合(DFS)

    1. 题目

    2.题目分析与思路

    3.代码

    1. 题目

    输入:"23"
    输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

    2. 思路

      这道题主要是考察了一个图的遍历,由两种方法,1.深度优先遍历2.广度优先遍历,一个用的是递归,或者栈,另一个用队列

    3. 代码

        先给出递归的深度优先遍历:(后来觉得这个是广度优先。。。。)

    class Solution:
        def letterCombinations(self, digits: str) -> List[str]:
            def callback(list2,list1):
                if len(list1) == 1:  #跳出条件
                    for i in list2:
                        for k in list1[0]:
                            res.append(i+k)
                else:
                    callback([k + i for k in list2 for i in list1[0]],list1[1:])
            res = []
            str1 = 'abc def ghi jkl mno pqrs tuv wxyz'.split(' ')
            list3 = [list(str1[int(i)-2]) for i in digits]
            if len(list3) == 0:  #主要是排除空的情况,否则在第6行会出现out of index
                return []
            callback([''],list3)
            return res

    从代码中可以看出,递归主要分为两个部分,第一个部分是最终的条件部分,第二个部分是自身调用函数的过程,递归的目的就是将一个多重问题转变为两个两个操作的过程。就像callback中的 跳出条件一样,否则的话,就将list1中的第一个列表和list2 进行合并后再执行callback函数,看看list1 是不是长度为1的了。

    这里有一个坑,就是如果输入的是空的话,就会出现outofindex所以要先判断一下是否为空。

  • 相关阅读:
    <form:select>的使用
    存储过程-删除、新建索引
    java 反射常用总结
    java判断是否是数字
    jquery遍历数组添加行删除行
    oracle常用sql
    cxf (zhuan)
    linux 常用命令--个人小结一
    java发送邮件
    socket和webservice特点
  • 原文地址:https://www.cnblogs.com/tjpeng/p/11625887.html
Copyright © 2011-2022 走看看