如何实现返回和为n的最少整数列表?Java函数开发求助
问题解析与代码实现
核心逻辑:贪心策略
要让列表元素数量最少,核心思路就是优先用最大的数:
- 先尽可能多地使用5,因为5是三个数里最大的,用得越多,总元素数越少
- 用5之后剩下的余数,再优先用2,最后用1补全
举几个例子验证:
- n=12:12÷5=2,余数2 → 2个5加1个2,总元素3个,是最少的
- n=25:25÷5=5,余数0 → 5个5,总元素5个
- n=3:3里最多用0个5,余数3 → 1个2加1个1,总元素2个,比3个1少
现有代码的问题
你当前的代码存在几个明显问题:
- 变量
a、b、c没声明类型,不符合Java语法 - 定义了
int[] j数组却调用add()方法(这是List的方法),类型不匹配 - 逻辑只处理了
a+b+c=8这一种情况,完全没覆盖其他数值场景
修正后的代码
import java.util.ArrayList; import java.util.List; public class ChangeCalculator { public static List<Integer> change(int n) { List<Integer> result = new ArrayList<>(); // 先添加尽可能多的5 int count5 = n / 5; for (int i = 0; i < count5; i++) { result.add(5); } int remainder = n % 5; // 根据余数添加对应元素,保证数量最少 if (remainder == 4) { // 4用两个2,比2+1+1少一个元素 result.add(2); result.add(2); } else if (remainder == 3) { result.add(2); result.add(1); } else if (remainder == 2) { result.add(2); } else if (remainder == 1) { result.add(1); } // 余数为0时无需额外操作 return result; } // 测试用例 public static void main(String[] args) { System.out.println(change(12)); // [5,5,2] System.out.println(change(25)); // [5,5,5,5,5] System.out.println(change(3)); // [2,1] } }
代码说明
- 初始化
ArrayList存储结果,符合返回List<Integer>的要求 - 通过整数除法
n/5得到最多能放的5的数量,循环添加到列表 - 计算余数后,针对不同余数选择元素数量最少的组合补充到列表中
内容的提问来源于stack exchange,提问作者user18984687
相关产品推荐
相关产品推荐

