import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param milk int整型一维数组 * @return int整型一维数组 */ public int[] tomorrowMilk (int[] milk) { // write code here // 将输入的整数数组转换为整数列表 List<Integer> milkList = new ArrayList<>(); for (int value : milk) { milkList.add(value); } Collections.reverse(milkList); // 反转列表 milkList.set(0, milkList.get(0) + 1); // 第一个元素加 1 int carry = 0; // 进位 milkList.add(0); // 在末尾添加一个 0,用于处理进位 for (int i = 0; i < milkList.size(); i++) { int sum = milkList.get(i) + carry; milkList.set(i, sum % 10); // 当前位的值 carry = sum / 10; // 进位 } // 移除末尾多余的 0 while (!milkList.isEmpty() && milkList.get(milkList.size() - 1) == 0) { milkList.remove(milkList.size() - 1); } Collections.reverse(milkList); // 恢复正常顺序 // 将整数列表转换回整数数组 int[] result = new int[milkList.size()]; for (int i = 0; i < milkList.size(); i++) { result[i] = milkList.get(i); } return result; } }
Java代码
主要考察了以下几个知识点:
- 向量操作
- 翻转
- 循环遍历:通过循环遍历向量中的元素,计算每一位的新值和进位。
- 进位处理
- 末尾多余零的移除
代码解释:
- 将输入的整数数组转换为整数列表。
- 反转列表,即将数组元素顺序颠倒。
- 将列表的第一个元素加 1,以表示明天的产奶量。
- 使用进位标志
carry
,遍历列表中的每个元素,将当前位的值与进位相加,更新当前位的值和进位。 - 在列表末尾添加一个零,用于处理最高位的进位。
- 移除列表末尾多余的零,以保持结果的正确性。
- 恢复列表正常顺序,即将列表元素重新反转。
- 将整数列表转换回整数数组作为最终的计算结果。