TOP

leadcode的Hot100系列--17. 电话号码的字母组合--回溯的另一种应用
2019-07-05 04:10:44 】 浏览:80
Tags:leadcode Hot100 系列 --17. 电话号码 字母 组合 回溯 应用

提交leetcode的时候遇到了问题,一直说访问越界,但仔仔细细检查n多遍,就是检查不出来。
因为我用到了count全局变量,自加一来表明当前数组访问的位置,
后来突然想到,是不是在运行的时候没有对这个全局变量清零……
果然,清零之后就可以了……已经3:47了,这里先上代码,明天再详细说吧……

char table[][5] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
char level = 0;
char *p[8];   // 存储需要进行组合的字符串
char len[8];  // 对应上面p存储的字符串的长度
char **out;
int count = 0;
char y[8] = {0};

void backtrack(int level_now)
{
    if (level_now == level)
    {
        memcpy(out[count], y, level);
        count ++;   // 完成一个字符串
        return;
    }
    for (int i=0; i<len[level_now]; i++)
    {
        y[level_now] = p[level_now][i];
        backtrack(level_now+1);
    }
    return;
}

char ** letterCombinations(char * digits, int* returnSize){
    level = strlen(digits);  // 需要几个组合,就需要几层
    *returnSize = 0;
    if (0 == level) return NULL;
    
    *returnSize = 1;
    
    for(int i=0; i<level; i++)
    {
        p[i] = table[digits[i]-'0'];
        len[i] = strlen(p[i]);
        if (len[i] == 0) return NULL;
        *returnSize *= len[i];
    }
    out = (char **)calloc(*returnSize, sizeof(char *));
    if (NULL == out) return NULL;
    for (int i=0; i<*returnSize; i++)
    {
        out[i] = (char *)calloc(1, sizeof(char) * (level+1));
        if (NULL == out[i]) return NULL;
    }
    backtrack(0);
    count = 0;   // 这里很重要!很重要!!很重要!!!
    return out;
}

leadcode的Hot100系列--17. 电话号码的字母组合--回溯的另一种应用 https://www.cppentry.com/bencandy.php?fid=45&id=227239

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇用GDB调试程序(一) 下一篇【LeetCode】 #7:反转整数 C语言