【发布时间】:2021-05-10 04:16:54
【问题描述】:
我的一个朋友在面试中被要求解决以下练习,但没有成功。我想自己尝试一下,但乍一看似乎比我难,所以 Stack 社区,请帮助:)
给定一个整数列表和一个整数 k,返回 k 是否可以 构建为该列表中任何数字的总和或这些数字的任何乘法的总和。
ex:对于给定的 [2,3,4] 和 k = 13,对于以下找到的组合 方法应该返回 true。
1) 2、2、2、2、2、3
2) 2、2、2、3、4
3) 2、2、3、3、3
4) 2、3、4、4
5) 3、3、3、4
我已经尝试过的是这样的:
List<Integer> inputList = new List<Integer>{
2, 3, 4
};
Integer k = 13;
Boolean result = false;
for (Integer i = 0; i < inputList.size(); i++) {
for (Integer j = 0; j < inputList.size(); j++) {
if (k >= inputList.get(i) && Math.mod(k - inputList.get(i), inputList.get(j)) == 0) {
result = true;
break;
}
}
if (result == true) {
break;
}
}
return result;
但不幸的是,这不是正确的解决方案,因为它没有考虑这种情况,当 k 不能被输入列表中的每个数字整除时,仍然有两个以上的数字(或它们的乘积)汇总在一起会导致给定 k。考虑素数,例如:[17, 53, 97] 和 k=167。它们都不是 k 除数,但总和结果为 167。
任何想法如何解决?我正在考虑递归,但也有人告诉我,这可以用更简单的方式解决,只需大约 10 行代码。
PS:我在 APEX 中编写了我的 sn-p,这是一种简化的 java。它没有流、向量、 广泛的收藏等,但这项任务是一个数学问题,所以任何形式的帮助都将不胜感激!
【问题讨论】:
标签: loops recursion math nested-loops