class Solution {
public int minimumNumbers(int num, int k) {
if (num == 0) return 0;
//去掉最后的个位之和,看剩余的数能否被10整除
for (int i = 1; i <= num; i++) {
int c = i * k;
if (c > num) return -1;
if ((num - c) % 10 == 0) return i;
}
return -1;
}
}
方法二:完全背包
class Solution {
public int minimumNumbers(int num, int k) {
if (num == 0) return 0;
if (k % 2 == 0 && num % 2 == 1) return -1;
List<Integer> coins = new ArrayList<>();
for (int i = 1; i <= num; i++) {
if (i % 10 == k) {
coins.add(i);
}
}
int[] dp = new int[num + 1];
dp[0] = 0;//初始化
for (int i = 1; i <= num; i++) {
dp[i] = Integer.MAX_VALUE;//初始化
for (int coin : coins) {
//如果i < coin,无解,跳过
//如果i >= coin并且dp[i - coin]有解时,获取dp[i]的最小值
if (i >= coin && dp[i - coin] != Integer.MAX_VALUE) {
dp[i] = Math.min(dp[i], dp[i - coin] + 1);
}
}
}
return dp[num] == Integer.MAX_VALUE ? -1 : dp[num];
}
}