以下问题来自codingbat:给定一组int,是否可以选择一组int中的一组,以便该组与给定目标相加?
该网站的作者提供了以下解决方案:
public boolean groupSum(int start, int[] nums, int target) {
if (start >= nums.length) return (target == 0);
if (groupSum(start + 1, nums, target - nums[start])) return true;
if (groupSum(start + 1, nums, target)) return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
假设我想尝试以下情况,其中nums = [2,4,8]并且称为groupSum(0,nums,10).
我看到,groupSum(0,nums,10)
会打电话groupSum(1,nums,10)
和groupSum(1,nums,8)
.
groupSum(1,nums,10)
电话groupSum(2, nums,10)
和groupSum(2, nums,6)
groupSum(1,nums,8)
电话groupSum(2,nums,8)
和groupSum(1,nums,4)
等等...
通过代码我看到以下调用:
groupSum(3,nums,10)
groupSum(3,nums,2)
groupSum(3,nums,6)
groupSum(3,nums,-2)
groupSum(3,nums,8)
groupSum(3,nums,0)
groupSum(3,nums,4)
groupSum(3,nums,-4)
Run Code Online (Sandbox Code Playgroud)
我看到groupSum(3,nums,0)
由于第一行应该返回true:
if (start >= nums.length) return …
我正在玩一些代码,我无法弄清楚为什么我的equals方法在两个数组相等时返回false.
public class Equal {
static int[] a;
public static boolean equals(int[] b){
for(int i=0;i<b.length;i++){
if(a[i] != b[i]) return false;
}
return true;
}
public static void main(String[] args){
int[] a = new int[3];
a[0]=1; a[1]=2; a[2]=3;
int[] b = new int[3];
b[0]=1; b[1]=2; b[2]=3;
System.out.println(a.equals(b)); //returns false (but why??)
System.out.println(Arrays.equals(a,b)); //returns true as expected
}
}
Run Code Online (Sandbox Code Playgroud)