刷题之电话号码的字母组合(leetcode)

电话号码的字母组合

在这里插入图片描述

回溯实现,但是需要练习一下C语言写法:

cpp 复制代码
class Solution {
private:
    string phone[8]={
        "abc",
        "def",
        "ghi",
        "jkl",
        "mno",
        "pqrs",
        "tuv",
        "wxyz"
    };
    vector<string>result;
    string path;

    void backtracking(string s,int startindex)
    {
        if(startindex==s.size()){
            result.push_back(path);
            return;
        }

        int index=s[startindex]-'2';
        for(int j=0;j<phone[index].size();j++){
            path.push_back(phone[index][j]);
            backtracking(s,startindex+1);
            path.pop_back();
        }
        
    }
public:
    vector<string> letterCombinations(string digits) {
        if(digits.size()==0)
            return result;
        backtracking(digits,0);
        return result;
    }
};

C:

c 复制代码
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
char** result;
char* path;
int resultTop;
int pathTop;
const char* letter[] = {
    "",
    "",
    "abc",
    "def",
    "ghi",
    "jkl",
    "mno",
    "pqrs",
    "tuv",
    "wxyz"
};
//回溯
void backtracking(int size, char* digits,int startindex)
{
    if(size==0)
        return;
    if (pathTop == size)//当遍历完所有数字(遍历到数的空节点了),则存下此次遍历的结果
    {
        char* temp = (char*)malloc(sizeof(int) * size);
        for (int i = 0;i < size;i++)
        {
            temp[i] = path[i];
        }
        temp[size] = '\0';//字符串结尾
        result[resultTop++] = temp;
        return;
    }
    //将字符数字转换为真的数字
    int digit = digits[startindex] - '0';
    for (int j = 0;j < strlen(letter[digit]);j++)
    {
        path[pathTop++] = letter[digit][j];//处理当前数字对应的字符串中的字母
        backtracking(size,digits,startindex + 1);//递归
        pathTop--;//回溯
    }
}
char** letterCombinations(char* digits, int* returnSize) {
    int size = strlen(digits);
    result = (char**)malloc(sizeof(int*) * 1000);
    path = (char*)malloc(sizeof(int) * size);
    resultTop = pathTop = 0;
    backtracking(size,digits,0);
    *returnSize = resultTop;
    return result;
}
相关推荐
圣保罗的大教堂42 分钟前
leetcode 3650. 边反转的最小路径总成本 中等
leetcode
木井巳2 小时前
【递归算法】验证二叉搜索树
java·算法·leetcode·深度优先·剪枝
We་ct4 小时前
LeetCode 30. 串联所有单词的子串:从暴力到高效,滑动窗口优化详解
前端·算法·leetcode·typescript
历程里程碑4 小时前
子串----和为K的子数组
大数据·python·算法·leetcode·elasticsearch·搜索引擎·哈希算法
YuTaoShao4 小时前
【LeetCode 每日一题】2976. 转换字符串的最小成本 I
算法·leetcode·职场和发展
我是咸鱼不闲呀6 小时前
力扣Hot100系列16(Java)——[堆]总结()
java·算法·leetcode
YuTaoShao7 小时前
【LeetCode 每日一题】2977. 转换字符串的最小成本 II——(解法一)记忆化搜索
算法·leetcode·职场和发展
希望有朝一日能如愿以偿7 小时前
力扣每日一题
数据结构·算法·leetcode
草履虫建模7 小时前
力扣算法分析 27.移除元素
java·开发语言·数据结构·后端·算法·leetcode·排序算法
im_AMBER7 小时前
Leetcode 109 链表的中间结点 | 删除链表的中间节点
数据结构·学习·算法·leetcode·链表