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

digitsi 是范围 '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;
}
相关推荐
小灰灰搞电子11 小时前
C语言 <ctype.h> 头文件详解
c语言·ctype.h
乐迪信息11 小时前
港口船舶逆行怎么管?AI防爆摄像机搭载智能检测算法
大数据·人工智能·深度学习·算法·计算机视觉
阿钱真强道11 小时前
17 嵌入式操作系统 | uloop 事件循环:TCP 客户端
c语言·tcp/ip·tcp·事件循环·uloop
Sirens.12 小时前
Java并发锁详解:六类锁策略与 synchronized 底层原理
java·前端·算法
和裕12 小时前
全纸结构重型纸箱能否满足 1 吨以上设备出口熏蒸豁免要求?通关合规性全解析
大数据·运维·网络·人工智能·算法
tangguofeng13 小时前
不带头结点的链队操作集(不含InitFlag)(C语言版)
算法
会员果汁13 小时前
函数调用和变长参数
c语言
苏打豆14 小时前
CRISP源码阅读——基于ROS2力矩反馈控制器与速度加速度零空间
c++·线性代数·算法·矩阵·机器人
蛋蛋的就会顺顺的14 小时前
hot100——矩阵
java·数据结构·算法·leetcode·力扣
老歌老听老掉牙15 小时前
麻花钻切屑形态演变的力学机制与临界条件分析
python·算法·钻头