LeetCode:Letter Combinations of a Phone Number

题目链接:https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/

题目介绍:给定一个数字字符串,返回数字可能表示的所有可能的字母组合。数字到字母的映射就像电话按钮一样。

解题思路:先计算所有可能组合的总数n,生成一个n个字符串的列表,然后计算到第i个数字时所有字符串第i个字符应该对应的字符

代码如下:

class Solution {
public:
    vector<string> letterCombinations(string digits) {
        if (digits == "") {
            vector<string> str;
            return str;
        }
        vector<string> shuzi(10);
        shuzi[2] = "abc";
        shuzi[3] = "def";
        shuzi[4] = "ghi";
        shuzi[5] = "jkl";
        shuzi[6] = "mno";
        shuzi[7] = "pqrs";
        shuzi[8] = "tuv";
        shuzi[9] = "wxyz";
        int num = 1;
        int* n = new int[digits.length()]();
        for (int i = 0; i < digits.length(); i++) {
            if ((digits[i] - 48) == 7 || (digits[i] - 48) == 9)
            {
                n[i] = 4;
            }
            else
            {
                n[i] = 3;
            }
            num *= n[i];
        }
        vector<string> str(num);
        int a = 1;
        for (int i = 0; i < digits.length(); i++) {
            a *= n[i];
            for (int j = 0; j < a; j++) {
                for (int k = 0; k < num / a; k++) {
                    str[j*num / a + k] += shuzi[digits[i]-48][j%n[i]];
                }
            }
            
        }
        return str;
    }
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值