刷题之电话号码的字母组合(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;
}
相关推荐
琢磨先生David9 天前
Day1:基础入门·两数之和(LeetCode 1)
数据结构·算法·leetcode
超级大福宝9 天前
N皇后问题:经典回溯算法的一些分析
数据结构·c++·算法·leetcode
Charlie_lll9 天前
力扣解题-88. 合并两个有序数组
后端·算法·leetcode
菜鸡儿齐9 天前
leetcode-最小栈
java·算法·leetcode
Frostnova丶9 天前
LeetCode 1356. 根据数字二进制下1的数目排序
数据结构·算法·leetcode
im_AMBER9 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
样例过了就是过了9 天前
LeetCode热题100 环形链表 II
数据结构·算法·leetcode·链表
tyb3333339 天前
leetcode:吃苹果和队列
算法·leetcode·职场和发展
踩坑记录9 天前
leetcode hot100 74. 搜索二维矩阵 二分查找 medium
leetcode
TracyCoder1239 天前
LeetCode Hot100(60/100)——55. 跳跃游戏
算法·leetcode