Leetcode 17. Letter Combinations of a Phone Number(python+cpp)

本文介绍了LeetCode第17题的解决方案,重点在于如何使用Python和C++实现电话号码对应的字母组合,同时提到了无重复combination的处理技巧,特别是对数字1的特殊处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Leetcode 17. Letter Combinations of a Phone Number

题目

在这里插入图片描述

解析

这题实际上是一个无重复combination的模板题,只需要对1做一下特殊处理即可
关于combination和permutation的总结,看这里

代码:

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        def backtracking(comb,level):
            if level==len(digits):
                ans.append(comb[:])
                return
            
            for c in d[digits[level]]:
                #comb.appned(c)
                backtracking(comb+c,level+1)
                #comb.pop()
                    
        
        
        d = {'2':['a','b','c'],'3':['d','e','f'],'4':['g','h','i'],'5':['j','k','l'],'6':['m','n','o'],'7':['p','q','r','s'],'8':['t','u','v'],'9':['w','x','y','z']}
        if not digits:
            return []
        ans = []
        backtracking('',0)
        return ans

C++版本:
注意一下unordered_map的直接初始化

class Solution {
public:
    vector<string> letterCombinations(string digits) {
        if(digits.size() < 1) return {};
        unordered_map<char,string> mapping{
            {'2',"abc"},
            {'3',"def"},
            {'4',"ghi"},
            {'5',"jkl"},
            {'6',"mno"},
            {'7',"pqrs"},
            {'8',"tuv"},
            {'9',"wxyz"}
        };
        vector<string> ans;
        backtracking(mapping,ans,digits,0,"");
        return ans;
        
        
    }
    void backtracking(unordered_map<char,string>& mapping, vector<string>& ans, string digits, int level, string curr){
        if(level == digits.size()){
            ans.push_back(curr);
            return;
        }
        // for(int i=level;i<digits.size();i++){
        for(auto c : mapping[digits[level]]){
            curr += c;
            backtracking(mapping,ans,digits,level+1,curr);
            curr.pop_back();
        }
        // }
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值