216.组合总和III
class Solution:
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
#回溯算法
res=[]
path=[]
def backtracking(n,k,startindex):
if(len(path)==k and sum(path)==n):
res.append(path[:])
return
for i in range(startindex,10):
path.append(i)
backtracking(n,k,i+1)
path.pop()
backtracking(n,k,1)
return res
17.电话号码的字母组合
#伪代码
string s;
vector<string> result;
void backtracking(digits,index){
if(index==digits.size()):
result.push_back(s);
return;
int digit=digits[index]-"0";
stringletter=letterMap[digit];
for(int i=0;i<letter.size;i++){
s.push_back(letter[i]);
backtracking(digits,index+1);
s.pop_back();
}
}
class Solution:
# global ans
# ans=''
def letterCombinations(self, digits: str) -> List[str]:
if not digits:
return []
res=[]
self.ans=''
letter_map={
'2': 'abc',
'3': 'def',
'4': 'ghi',
'5': 'jkl',
'6': 'mno',
'7': 'pqrs',
'8': 'tuv',
'9': 'wxyz'
}
def backtracking(digits,index):
if(index==len(digits)):
res.append(self.ans)
return
letters=letter_map[digits[index]]
for i in letters:
self.ans=self.ans+i
backtracking(digits,index+1)
self.ans=self.ans[:-1]
backtracking(digits,0)
return res