前缀积解题基本思路:
1.首先创建整型集合,添加元素1(任何整数乘以1都等于整数本身)。
2.将与新元素的乘积依次添加到整型集合中,再根据相应的索引值进行除法操作,从而获取最后K个数的乘积。
3.(如果新元素为0,且最后K个元素中包含0,乘积一定为0,所以在将新元素添加到整型集合之前先进行判断,新元素为0,则不进行添加操作,并重新初始化集合添加元素1)。
4.执行除法操作时需要判断之前元素中有没有出现过0,集合有没有重新初始化,即集合中元素个数是否大于K,如果小于或等于K,则之前元素中有0,返回结果0。
执行代码:
class ProductOfNumbers {//创建整型集合List<Integer> list;public ProductOfNumbers() {//集合初始化list = new ArrayList();//添加元素1,任何整数与1的乘积都是整数本身list.add(1); }public void add(int num) {//判断下一个元素是否为0,如果为0,则之前集合中的元素无效,重新初始化集合if(num == 0){ list = new ArrayList();list.add(1);}else{//下一个元素不为0,则将其与之前的乘积结果相乘,添加到集合中list.add(list.get(list.size()-1) * num);}}public int getProduct(int k) {//判断集合元素个数是否大于K,如果大于,则之前元素并未出现0,小于等于,则返回0if(list.size() <= k){return 0;}//将最后K个数的乘积返回,即集合中所有数的乘积 除以 元素个数-K-1之前所有数的乘积return list.get(list.size()-1) / list.get(list.size()-1-k);}
}