给定一组唯一正整数(大小范围高达32
),需要确定是否可以求和。
蛮力方法是:
bool isPossible(long long int n, int s)
{
if(n<0)
return false;
if(n == 0)
return true;
for(int i=s;i<32;++i)
if(isPossible(n-allNumbers[i], i+1))
return true;
return false;
}
isPossible(n,0)
返回对应于数字n
是否可以表示为集合allNumbers[]
中唯一数字之和的布尔值。但是这个解决方案的复杂性是O(2^32)
。是否有可能为这个问题获得更好的运行时间?