题目截了个图,输出格式不用管,按照回溯算法写的,不知道哪里出问题了导致输出有重复
{
if (num == k)
{
for (int i = 0; i < k; i++)
{
if (oneresult[i]) printf("%d",oneresult[i]);
}
printf("\n");
return;
}
for (int i = startindex; i < n; i++)
{
oneresult[num++] = i+1;
combine(n,k,startindex+1);
oneresult[num--] = 0;
}
}
int main()
{
int n,k;
//memset(results,0,sizeof(results));
memset(oneresult,0,sizeof(oneresult));
scanf("%d %d",&n,&k);
combine(n,k,0);
//for (int i = 0; i < 100; i++)
//{
// for (int j = 0; j < 10; j++)
// {
// if (results[i][j]) printf("%d",results[i][j]);
// }
// printf("\n");
//}
system("pause");
return 0;
}
第20行传入startindex+1时应该传入i+1,下一个递归的起点是i + 1,这样就不会重复了
看看官方题解找区别
https://leetcode-cn.com/problems/combinations/solution/zu-he-by-leetcode-solution/