刷题之电话号码的字母组合(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 小时前
LeetCode100天Day9-无重复字符的最长子串与赎金信
java·开发语言·数据结构·leetcode
努力学算法的蒟蒻2 小时前
day52(1.2)——leetcode面试经典150
算法·leetcode·面试
java修仙传2 小时前
力扣hot100:字符串解码
算法·leetcode·职场和发展
梭七y2 小时前
【力扣hot100题】(116)矩阵置零
算法·leetcode·矩阵
youngee113 小时前
hot100-63买卖股票的最佳时机
数据结构·算法·leetcode
Swift社区3 小时前
LeetCode 464 我能赢吗
算法·leetcode·深度优先
POLITE33 小时前
Leetcode 560. 和为 K 的子数组 JavaScript (Day 5)
javascript·算法·leetcode
橘颂TA4 小时前
【剑斩OFFER】算法的暴力美学——合并 k 个升序链表
算法·leetcode·牛客·结构与算法
在风中的意志13 小时前
[数据库SQL] [leetcode] 2388. 将表中的空值更改为前一个值
数据库·sql·leetcode
还不秃顶的计科生14 小时前
LeetCode 热题 100第二题:字母易位词分组python版本
linux·python·leetcode