有效的方法来检查一组给定的数字是否可以求和

时间:2017-07-28 15:02:56

标签: c++ algorithm performance time-complexity

给定一组唯一正整数(大小范围高达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)。是否有可能为这个问题获得更好的运行时间?

0 个答案:

没有答案