package main /** * * @param N int整型 * @return int整型 */ func GetCoinCount( N int ) int { // write code here dp := make([]int, 1025) coins := []int{1, 4, 16, 64} for i := 1; i < 1025; i++ { for _, c := range coins { if c <= i { dp[i] = 1 + dp[i - c] } } } return dp[1024-N] }
import java.util.*; public class Solution { /** * * @param N int整型 * @return int整型 */ public int GetCoinCount (int N) { // write code here int[] coins = new int[]{1, 4, 16, 64}; int ans = 0; int i = coins.length - 1; N = 1024 - N; while (N > 0) { while (N >= coins[i]) { N -= coins[i]; ans++; } i--; } return ans; } }贪心法
class Solution { public: /** * * @param N int整型 * @return int整型 */ int GetCoinCount(int N) { // write code here int nums[1025]={0}; int coins[4]={1,4,16,64}; for(int i=0;i<1024;i++){ for(int j=0;j<4;j++){ if(coins[j]<=i){ nums[i]=1+nums[i-coins[j]]; } } } return nums[1024-N]; } };
dp
import java.util.*; public class Solution { /** * * @param N int整型 * @return int整型 */ public int GetCoinCount (int N) { // write code here int[] coins = new int[]{1, 4, 16, 64}; int diff = 1024 - N; int[] dp = new int[diff + 1]; for (int i = 1;i <= diff;i++) { int min = Integer.MAX_VALUE; for (int coin : coins) { if (i >= coin) { min = Math.min(min, dp[i - coin] + 1); } } dp[i] = min; } return dp[diff]; } }
import java.util.*; public class Solution { /** * * @param N int整型 * @return int整型 */ public int GetCoinCount (int N) { // write code here int sum = 1024 - N; int count = 0 ; while(sum != 0) { if(sum >= 64) { count += sum / 64; sum -= sum / 64 * 64; }else if(sum >= 16) { count += sum / 16; sum -= sum / 16 * 16; }else if(sum >= 4) { count += sum / 4; sum -= sum / 4 * 4; }else if(sum >= 1) { count += sum; sum -= sum ; } } return count; } }
import java.util.*; public class Solution { public int GetCoinCount (int N) { if (N==1024){return 0;} int[] nums = {64,16,4,1};//找零次数最少,优先给大额的面值 int counts = 0; int money = 1024 - N;//需要找零的钱数目 while(money != 0){//待找零为零跳出循环 for(int i = 0;i < nums.length;i++){ if(money >= nums[i]){//待找零金额大于当前面额就给当前面额 counts+=money/nums[i];//整除,记录当前面额的硬币给与的次数 money = money % nums[i];//取模,记录余数,既是还没有找零的数目 } } } return counts; } }
import java.util.*; import java.math.*; public class Solution { /** * * @param N int整型 * @return int整型 */ public int GetCoinCount (int N) { // write code here int sum = 1024-N; if(sum<4){ return sum; } int[] f = new int[sum+1]; f[0] = 0; f[1] = 1; for(int i=2;i<sum+1;i++){ int t1 = f[i-1]; int t2 = i-4>=0?f[i-4]:1025; int t3 = i-16>=0?f[i-16]:1025; int t4 = i-64>=0?f[i-64]:1025; int m1 = Math.min(t1,t2); int m2 = Math.min(t3,t4); f[i] = Math.min(m1,m2)+1; } return f[sum]; } }