Leetcode-322. 零钱兑换个人答案与官方答案的一个对比(以及对测试用例的思考)
生活随笔
收集整理的這篇文章主要介紹了
Leetcode-322. 零钱兑换个人答案与官方答案的一个对比(以及对测试用例的思考)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接
https://leetcode-cn.com/problems/coin-change/
題目描述
給定不同面額的硬幣 coins 和一個總金額 amount。編寫一個函數來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回?-1。
示例?1:
輸入: coins = [1, 2, 5], amount = 11
輸出: 3?
解釋: 11 = 5 + 5 + 1
示例 2:
輸入: coins = [2], amount = 3
輸出: -1
個人解題代碼:
class Solution {public int coinChange(int[] coins, int amount) {int[] f = new int[amount+1];if(amount==0){return 0;}for(int i = 0;i<coins.length;i++){if(coins[i]>amount){continue;}f[coins[i]]=1;}for(int i =1;i<=amount;i++) {if(f[i]==0){f[i]=Integer.MAX_VALUE;}}for(int i = 1;i<=amount;i++){if(f[i]==Integer.MAX_VALUE ){int min = Integer.MAX_VALUE-1;for(int j = 0;j<coins.length;j++){if(coins[j]<=i){min = Math.min(min,f[i-coins[j]]+1);}}f[i]=min;}}return f[amount]>=Integer.MAX_VALUE-1?-1:f[amount];} }官方解題代碼
public class Solution {public int coinChange(int[] coins, int amount) {int max = amount + 1;int[] dp = new int[amount + 1];Arrays.fill(dp, max);dp[0] = 0;for (int i = 1; i <= amount; i++) {for (int j = 0; j < coins.length; j++) {if (coins[j] <= i) {dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1);}}}return dp[amount] > amount ? -1 : dp[amount];} }問題——對測試用例的思考
在一次提交中,我遇到了種種情況,當時的我的感受就是,測試用例為何如此刁鉆。?Integer.MAX_VALUE 正是2147483647。
我當時差點拉黑了LeetCode,但后來想一想確實是自己錯了。
但因為Leetcode用了這樣的測試用例,我看了官方解答,之后發現了一個漏洞,倘若我把這個題目中的amount頁設置成2147483647,那么官方的代碼不久錯誤了么,果然,在我的操作下,出現了異常。
希望
希望測試用例不要太刁鉆把。。。。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Leetcode-322. 零钱兑换个人答案与官方答案的一个对比(以及对测试用例的思考)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode-520. 检测大写字母
- 下一篇: Mac安装code blocks以及解无