解決方案應該是遞歸的,零是任何集合中的一個元素,並且可以多次使用集合中的元素。遞歸確定是否存在與給定的int參數匹配的正整數數組的子集和?
例如,如果數組爲{3,5,7},則17將返回true,因爲5 + 5 + 7 = 17 但4將返回false。
我已經試過這樣:
public static boolean isSumOf(int [] s, int n)
{
return isSumOf(s, s.length, n);
}
static boolean isSumOf(int s[], int length, int n)
{
// Base Cases
if (n == 0)
{
return true;
}
if (length == 0 && n != 0)
{
return false;
}
// If last element is greater than sum, then ignore it
if (s[length-1] > n)
{
return isSumOf(s, length-1, n);
}
/* else, check if sum can be obtained by any of the following
(a) including the last element
(b) excluding the last element */
return isSumOf(s, length-1, n) || isSumOf(s, length-1, n-s[length-1]);
}
,但它排除了多次
我忘了說,我不允許使用循環,但它的一個有趣的方向... –
看到更新..... – MBo
哇,我不敢相信!我正在努力解決這個問題......非常感謝你! –