Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

17. 电话号码的字母组合 #27

Open
Labels
@Geekhyt

Description

@Geekhyt

原题链接

回溯法

使用回溯法进行求解,回溯是一种通过穷举所有可能情况来找到所有解的算法。

如果一个候选解最后被发现并不是可行解,回溯算法会舍弃它,并在前面的一些步骤做出一些修改,并重新尝试找到可行解。

究其本质,其实就是枚举。

如果没有更多的数字需要被输入,说明当前的组合已经产生。

如果还有数字需要被输入:

  • 遍历下一个数字所对应的所有映射的字母。
  • 将当前的字母添加到组合最后,也就是str + tmp[r]
constletterCombinations=function(digits){if(!digits){return[]}constlen=digits.lengthconstmap=newMap()map.set('2','abc')map.set('3','def')map.set('4','ghi')map.set('5','jkl')map.set('6','mno')map.set('7','pqrs')map.set('8','tuv')map.set('9','wxyz')constresult=[]functiongenerate(i,str){if(i===len){result.push(str)return}consttmp=map.get(digits[i])for(letr=0;r<tmp.length;r++){generate(i+1,str+tmp[r])}}generate(0,'')returnresult}

N+M是输入数字的总数

  • 时间复杂度:O(3^N * 4^M)
  • 空间复杂度:O(3^N * 4^M)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions


      [8]ページ先頭

      ©2009-2025 Movatter.jp