• leetcode-电话号码组合(C CODE)


    1. 题目

    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
    给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
    在这里插入图片描述
    示例 1:

    输入:digits = “23”
    输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]

    示例2:

    输入:digits = “”
    输出:[]

    示例 3:

    输入:digits = “2”
    输出:[“a”,“b”,“c”]

    提示:

    0 <= digits.length <= 4
    digits[i] 是范围 [‘2’, ‘9’] 的一个数字。

    2. 编程实现

    2.1 思路

    1. 如果输入长度为0,直接返回,没有排列组合;
    2. 如果输入长度是1,那么直接就找对应按键上边的字母输出;
    3. 如果输入长度大于1,例如是2

    两个数字的排列组合

    可以定义一个map表,把字母与数组做一个关系对应
    如:

    typedef struct {
    	int num;
    	char character[5];
    } map_t;
    
    map_t map[10] = {
    	{0, {}},
    	{1, {}},
    	{3, {'a','b','c'}},
    	{3, {'d','e','f'}},
    	{3, {'g','h','i'}},
    	{3, {'j','k','l'}},
    	{3, {'m','n','o'}},
    	{4, {'p','q','r','s'}},
    	{3, {'t','u','v'}},
    	{4, {'w','x','y','z'}},
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    2.2 编程实现

    #include 
    #include 
    #include 
    
    typedef struct {
        int num;
        char letters[5];
    } map_t;
    
    map_t map[10] = {
        {0, {}},
        {1, {}},
        {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'}},
    };
    
    void generateCombinations(char* digits, int index, char* current, char** result, int* count) {
        if (digits[index] == '\0') {
            current[index] = '\0';
            result[(*count)] = strdup(current);
            (*count)++;
        } else {
            int digit = digits[index] - '0';
            for (int i = 0; i < map[digit].num; i++) {
                current[index] = map[digit].letters[i];
                generateCombinations(digits, index + 1, current, result, count);
            }
        }
    }
    
    char** letterCombinations(char* digits, int* returnSize) {
        int len = strlen(digits);
        char** result = (char**)malloc(sizeof(char*) * 10000);
        *returnSize = 0;
    
        if (len == 0) {
            return result;
        }
    
        char current[5] = {0};
        generateCombinations(digits, 0, current, result, returnSize);
    
        return result;
    }
    
    int main() {
        char* digits = "23"; // 你可以修改这里的输入数字字符串
        int returnSize;
        char** result = letterCombinations(digits, &returnSize);
    
        for (int i = 0; i < returnSize; i++) {
            printf("%s\n", result[i]);
            free(result[i]);
        }
    
        free(result);
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
  • 相关阅读:
    word域代码交叉引用合并
    2022年6月电子学会Python等级考试试卷(五级)答案解析
    nginx-module-vts监控nginx流量
    第二个Maven工程_java培训
    二叉树学习笔记
    使用VSCode进行Python模块调试
    Linux 的权限
    mathtype符号显示不全的问题
    ClickHouse快速上手
    STM8L151使用protothread
  • 原文地址:https://blog.csdn.net/weixin_47139576/article/details/133771002