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表,把字母与数组做一个关系对应

如:

c 复制代码
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'}},
}

2.2 编程实现

c 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

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;
}
相关推荐
CoovallyAIHub40 分钟前
中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
深度学习·算法·计算机视觉
NAGNIP2 小时前
Serverless 架构下的大模型框架落地实践
算法·架构
moonlifesudo2 小时前
半开区间和开区间的两个二分模版
算法
moonlifesudo2 小时前
300:最长递增子序列
算法
CoovallyAIHub7 小时前
港大&字节重磅发布DanceGRPO:突破视觉生成RLHF瓶颈,多项任务性能提升超180%!
深度学习·算法·计算机视觉
CoovallyAIHub7 小时前
英伟达ViPE重磅发布!解决3D感知难题,SLAM+深度学习完美融合(附带数据集下载地址)
深度学习·算法·计算机视觉
聚客AI1 天前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm
大怪v1 天前
前端:人工智能?我也会啊!来个花活,😎😎😎“自动驾驶”整起!
前端·javascript·算法
惯导马工1 天前
【论文导读】ORB-SLAM3:An Accurate Open-Source Library for Visual, Visual-Inertial and
深度学习·算法
骑自行车的码农1 天前
【React用到的一些算法】游标和栈
算法·react.js