提交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.cnblogs.com/payapa/p/11136052.html