17. 电话号码的字母组合
17 电话号码
2023-09-14 09:06:53 时间
17. 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入:digits = “23”
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
示例 2:
输入:digits = “”
输出:[]
示例 3:
输入:digits = “2”
输出:[“a”,“b”,“c”]
解题代码如下:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
char map[10][5] = {"\0","\0", "abc\0", "def\0", "ghi\0", "jkl\0", "mno\0", "pqrs\0", "tuv\0", "wxyz\0"};
void f(char **re,int po,int size,int len,char * digits,int min,int max){
if(size<len){
// printf("size %d ",size);
int i=0;
if(digits[po]!='\0'){
int index=digits[po]-'0';
int strl=strlen(map[index]);
int poz=min;
int num=(max-min)/strl;
int j;
for(i=0;i<strl;i++){
char ch=map[index][i];
for(j=poz;j<poz+num;j++){
// printf("%d ",j);
re[j][size]=ch;
if(size==len-1){
// printf("size %d ",size);
re[j][size+1]='\0';
}
}
f(re,po+1,size+1,len,digits,poz,poz+num);
poz=poz+num;
}
}
}
}
char ** letterCombinations(char * digits, int* returnSize){
int max=1;
int i=0;
if(strlen(digits)==0){
* returnSize=0;
return digits;
}
while(digits[i]!='\0'){
int index=digits[i]-'0';
max=max*strlen(map[index]);
i++;
}
int len=i;
char **re=(char **)malloc(sizeof(char *)*max);
for(i=0;i<max;i++){
re[i]=(char *)malloc(sizeof(char)*(len+1));
}
if(strlen(digits)==1){
for(i=0;i<max;i++){
int index=digits[0]-'0';
re[i][0]= map[index][i];
re[i][1]='\0';
}
* returnSize=max;
return re;
}
f(re,0,0,len,digits,0,max);
* returnSize=max;
return re;
}
相关文章
- Python 编程 | 连载 17 - 高阶函数与装饰器
- 最全Pycharm教程(17)——Pycharm编辑器功能之自动导入模块
- 2022 年谷歌博士生奖学金名单公布,17 位华人博士生入选
- 如何免安装使用 Python?推荐 17 个在线的 Python 解释器!
- 2022-12-17:订单最多的客户。以下数据,结果输出3。请问sql语句如何写?```sqlDROP TABLE IF EXI
- 从 Java 8 升级到 Java 17 踩坑全过程,建议收藏!
- 【专业统计分析】STATA软件 17最新版下载安装
- Python开发系列课程(17) – Python“惯例”详解编程语言
- 17 种查看 Linux 物理内存的方法
- Nginx网站架构实战——17、centos6.5部署nginx+Lua环境
- 17款JavaScript工具让陈旧代码换面
- 5717版MySQL持续改进数据库管理体验(5.7.17 MySQL)
- 1 元卖子、巨亏易主,汉邦高科的 17 载创业启示录