刷题之电话号码的字母组合(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;
}
相关推荐
我要学编程(ಥ_ಥ)2 小时前
一文详解“二叉树中的深搜“在算法中的应用
java·数据结构·算法·leetcode·深度优先
chenziang13 小时前
leetcode hot100 对称二叉树
算法·leetcode·职场和发展
林的快手5 小时前
209.长度最小的子数组
java·数据结构·数据库·python·算法·leetcode
Dream it possible!8 小时前
LeetCode 热题 100_LRU 缓存(35_146_中等_C++)(哈希表 + 双向链表)(构造函数声明+初始化列表=进行变量初始化和赋值)
c++·leetcode·缓存
chenziang111 小时前
leetcode hot100
算法·leetcode·职场和发展
木向13 小时前
leetcode22:括号问题
开发语言·c++·leetcode
蹉跎x13 小时前
力扣1358. 包含所有三种字符的子字符串数目
数据结构·算法·leetcode·职场和发展
冠位观测者18 小时前
【Leetcode 热题 100】124. 二叉树中的最大路径和
数据结构·算法·leetcode
m0_6759882319 小时前
Leetcode3218. 切蛋糕的最小总开销 I
c++·算法·leetcode·职场和发展
axxy20001 天前
leetcode之hot100---24两两交换链表中的节点(C++)
c++·leetcode·链表