【leetcode-29】5341. 最後 K 個數的乘積

題目描述

請你實現一個「數字乘積類」ProductOfNumbers,要求支持下述兩種方法:

  1. add(int num)

將數字 num 添加到當前數字列表的最後面。
2. getProduct(int k)

返回當前數字列表中,最後 k 個數字的乘積。
你可以假設當前列表中始終 至少 包含 k 個數字。
題目數據保證:任何時候,任一連續數字序列的乘積都在 32-bit 整數範圍內,不會溢出。

示例:

輸入:
[“ProductOfNumbers”,“add”,“add”,“add”,“add”,“add”,“getProduct”,“getProduct”,“getProduct”,“add”,“getProduct”]
[[],[3],[0],[2],[5],[4],[2],[3],[4],[8],[2]]

輸出:
[null,null,null,null,null,null,20,40,0,null,32]

解釋:
ProductOfNumbers productOfNumbers = new ProductOfNumbers();
productOfNumbers.add(3); // [3]
productOfNumbers.add(0); // [3,0]
productOfNumbers.add(2); // [3,0,2]
productOfNumbers.add(5); // [3,0,2,5]
productOfNumbers.add(4); // [3,0,2,5,4]
productOfNumbers.getProduct(2); // 返回 20 。最後 2 個數字的乘積是 5 * 4 = 20
productOfNumbers.getProduct(3); // 返回 40 。最後 3 個數字的乘積是 2 * 5 * 4 = 40
productOfNumbers.getProduct(4); // 返回 0 。最後 4 個數字的乘積是 0 * 2 * 5 * 4 = 0
productOfNumbers.add(8); // [3,0,2,5,4,8]
productOfNumbers.getProduct(2); // 返回 32 。最後 2 個數字的乘積是 4 * 8 = 32

提示:

add 和 getProduct 兩種操作加起來總共不會超過 40000 次。
0 <= num <= 100
1 <= k <= 40000

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/product-of-the-last-k-numbers
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

解題思路

  1. 用ArrayList存儲,求取長度,讀取從len - k開始直到最後一個值,並求積。

代碼

class ProductOfNumbers {
    private List<Integer> list;
    public ProductOfNumbers() {
        list = new ArrayList<>();
    }

    public void add(int num) {
        list.add(num);
    }

    public int getProduct(int k) {
        int len = list.size(), count = 1;
        while(k>0){
            count *= list.get(len - k--);
        }
        return count;
    }
}

/**
 * Your ProductOfNumbers object will be instantiated and called as such:
 * ProductOfNumbers obj = new ProductOfNumbers();
 * obj.add(num);
 * int param_2 = obj.getProduct(k);
 */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章