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. 向量操作
  2. 翻转
  3. 循环遍历:通过循环遍历向量中的元素,计算每一位的新值和进位。
  4. 进位处理
  5. 末尾多余零的移除

代码解释:

  1. 将输入的整数数组转换为整数列表。
  2. 反转列表,即将数组元素顺序颠倒。
  3. 将列表的第一个元素加 1,以表示明天的产奶量。
  4. 使用进位标志 carry,遍历列表中的每个元素,将当前位的值与进位相加,更新当前位的值和进位。
  5. 在列表末尾添加一个零,用于处理最高位的进位。
  6. 移除列表末尾多余的零,以保持结果的正确性。
  7. 恢复列表正常顺序,即将列表元素重新反转。
  8. 将整数列表转换回整数数组作为最终的计算结果。