39.组合总和
这个题我是参考了别人的写法,刚看到题感觉特别简单,但是写着写着确实没有头绪,这道题用了回溯,如果不满足tar就一直循环,直到满足。
#include<iostream>
using namespace std;
int sum=0;
int a1[10];
void find(int *a,int tar,int len,int num,int loc)
{
if(sum>tar)
return;
else if(sum==tar){
for(int i=0;i<len;i++){
cout<<a1[i]<<" ";
}
cout<<"\n";
return;
}else{
int j=loc;//loc指的是上一次加到 a 数组的哪一位置了
for(int j=loc;j<num;j++){
sum = sum+ a[j];
a1[len]=a[j];
find(a,tar,len+1,num,loc);
sum=sum-a[j];
loc++;
}
}
}
int main()
{
int a[10001]={0};
int tar=0;
int num=0;
cin>>num;
for (int i=0;i<num;i++)
{
scanf ("%d",&a[i]);
}
cin>>tar;
find(a,tar,0,num,0);
return 0;
}
本文深入探讨了编号为39的组合总和问题,通过使用回溯算法来寻找所有可能的数列组合,这些组合的元素之和等于目标值。文章详细解释了算法的实现过程,并提供了完整的C++代码示例。
11万+

被折叠的 条评论
为什么被折叠?



