LeetCode——1518.换酒问题

通过万岁!!!

  • 题目:先买numBottles瓶酒,然后numExchange个空瓶子,可以换一瓶,问一共能喝多少瓶。
  • 思路:记录当前的空瓶子数量就行了,空瓶子数量。
  • 技巧:
    • 需要注意的是空瓶子数量等于商+余数。商表示本次能换的,余数表示之前还剩下的空瓶子。
    • 此外还需要一个while循环,而循环退出的条件是,手里的空瓶子,不能再兑换酒了。

伪代码

首先,如果我们买的酒不足以换下一次的话,那就直接返回numBottles,因为我们就买了这些。
首先定义返回变量ans,并且ans初始化应该等于numBottles,因为这些酒是一定能喝到的。
然后定义变量余数和商,并分别先计算一下。商就是能换的个数,余数就是还完之后还剩多少空瓶子。
ans需要+=商,因为商这些是又能喝到的
while循环,只要我新换的(商)和之前的(余数)是大于等于numExchange,也就是还能换
    那就重新计算余数和商,这里需要一个临时变量的,不懂的可以看实现部分,就懂了
    ans+=本次换的商
return ans

java代码

class Solution {
    public int numWaterBottles(int numBottles, int numExchange) {
        if (numBottles < numExchange) return numBottles;

        int ans = numBottles;
        int remainder = numBottles % numExchange;
        int business = numBottles / numExchange;
        ans += business;// 上面已经兑换过一次了
        while (business + remainder >= numExchange) {// 余数加商
            numBottles = business;// 这里需要一个临时变量,因为下面两行都需要business和remainder,但是前面一行会改变一个值
            business = (business + remainder) / numExchange;
            remainder = (numBottles + remainder) % numExchange;
            ans += business;
        }
        return ans;
    }
}
  • 总结:题目不是难,唯一需要主义的就是换的时候是余数+商,余数表示之前剩下的空瓶子,商表示我刚刚换了以后得到的瓶子。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值