当前位置: 首页 > news >正文

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'}},
}

2.2 编程实现

#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;
}
http://www.lryc.cn/news/190524.html

相关文章:

  • Leetcode92. 反转链表 II
  • 【算法作业记录】
  • 回归预测、分类预测、时间序列预测 都有什么区别?
  • 关于网络协议的若干问题(三)
  • 办公室人人在用的iTab桌面真的好用吗?
  • 循环中的else语句
  • 三.镜头知识之FOV
  • 分布式事务入门
  • Ubuntu的中文乱码问题
  • [GXYCTF2019]Ping Ping Ping - RCE(空格、关键字绕过[3种方式])
  • ceph 分布式存储与部署
  • Go 结构体深度探索:从基础到应用
  • 分布式系统开发技术中的CAP定理原理
  • Mysql 报错 You can‘t specify target table ‘表名‘ for update in FROM clause
  • 【DevOps】DevOps—基本概念
  • 发行版兴趣小组季度动态:Anolis OS 支持大热 AI 软件栈,引入社区合作安全修复流程
  • android app开发环境搭建
  • oracle入门笔记一
  • linux下安装ffmpeg的详细教程、ffmpeg is not installed
  • ctfshow-ssti
  • 【ES6 03】变量解构赋值
  • RustDay03——记录刷完Rust100题
  • 微软10月补丁 | 修复103个漏洞,包括2个零日漏洞,13个严重漏洞
  • ubuntu编写makefile编译c++程序
  • 详解COCO数据格式的json文件内容
  • 2023.10.12
  • antd Form shouldUpdate 关联展示 form 数组赋值
  • vue实现一个简单导航栏
  • 每日leetcode_LCP01猜数字
  • 接口自动化测试_L1