【发布时间】:2021-07-27 09:36:08
【问题描述】:
你好,这是我第一次在这个社区发帖
所以,我需要做的是:
编写一个函数 canSum(),它接受一个目标总和和一个数字数组作为参数。
该函数应返回一个布尔值,指示是否可以使用数组中的数字生成目标总和。
您可以根据需要多次使用数组中的元素
您可以假设所有输入数字都是非负数。
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
System.out.println(canSum(7, new int[]{2, 3})); //true
System.out.println(canSum(7, new int[]{5, 3, 4, 7})); //true
System.out.println(canSum(7, new int[]{2, 4})); //false
System.out.println(canSum(8, new int[]{2, 3, 5})); //true
System.out.println(canSum(300, new int[]{7, 14})); //false
}
private static Map<Integer, Boolean> memo = new HashMap<>();
public static boolean canSum(int target, int[] arr){
if(memo.containsKey(target)) return memo.get(target);
if(target == 0) return true;
if(target < 0) return false;
for(int i = 0; i< arr.length;i++){
int remainder = target - arr[i];
if(canSum(remainder,arr)){
memo.put(target, true);
return true;
}
}
memo.put(target,false);
return false;
}
程序输出: 真的 真的 真的 真的 真的
什么时候应该: 真的 真的 错误的 真的 假的
【问题讨论】:
-
您的第一个方法调用将产生一个带有 {7,true} 的 Map.Entry。在您的第二次和第三次调用中,地图中的此条目将作为结果返回 true。
-
2 + 3 根本不是 7,甚至没有接近它,为什么它应该返回 true ???!?!?
-
@GiorgosXou 据我了解,数字可以多次使用。所以 2+2+3=7
-
@OHGODSPIDERS 真的,我的错,哈哈,谢谢
-
*我急着回答*