硬币之谜:如何用最少的步骤拿完所有硬币?

本篇博客会讲解力扣“LCP 06. 拿硬币”的解题思路,这是题目链接。
先来审题:

本题的思路是:分开计算每一堆硬币最少的拿取次数,再求和。
假设某一堆硬币的个数是x,则最少的拿取次数要考虑x是奇数还是偶数。
- 若x是偶数,则每次拿取2个硬币,拿取次数是x/2。
- 若x是奇数,则每次拿取2个硬币,直到只剩1个硬币,再拿走最后1个硬币即可,拿取次数是x/2+1。
统一以下,拿取次数是x/2+x%2或者(x+1)/2。
代码如下:
int minCount(int* coins, int coinsSize){int ret = 0;// 计算每一堆硬币最少拿几次,再求和for (int i = 0; i < coinsSize; ++i){//ret += coins[i] / 2 + coins[i] % 2;ret += (coins[i] + 1) / 2;}return ret;
}

轻松通过。
总结
对于奇偶数分类讨论的情况,可以考虑取模,或者“加1后再除2”。
感谢大家的阅读!
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
