刷题之电话号码的字母组合(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;
}
相关推荐
天选之女wow24 分钟前
【代码随想录算法训练营——Day32】动态规划——509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯
算法·leetcode·动态规划
红衣小蛇妖32 分钟前
LeetCode-704-二分查找
java·算法·leetcode·职场和发展
QiZhang | UESTC1 小时前
JAVA算法练习题day27
java·开发语言·c++·算法·leetcode·hot100
如竟没有火炬6 小时前
LRU缓存——双向链表+哈希表
数据结构·python·算法·leetcode·链表·缓存
爱编程的化学家8 小时前
代码随想录算法训练营第27天 -- 动态规划1 || 509.斐波那契数列 / 70.爬楼梯 / 746.使用最小花费爬楼梯
数据结构·c++·算法·leetcode·动态规划·代码随想录
海琴烟Sunshine8 小时前
leetcode 66.加一 python
python·算法·leetcode
一只鱼^_11 小时前
力扣第470场周赛
数据结构·c++·算法·leetcode·深度优先·动态规划·启发式算法
Asmalin20 小时前
【代码随想录day 35】 力扣 01背包问题 一维
算法·leetcode·职场和发展