列表

详情


2310. 个位数字为 K 的整数之和

给你两个整数 numk ,考虑具有以下属性的正整数多重集:

返回该多重集的最小大小,如果不存在这样的多重集,返回 -1

注意:

 

示例 1:

输入:num = 58, k = 9
输出:2
解释:
多重集 [9,49] 满足题目条件,和为 58 且每个整数的个位数字是 9 。
另一个满足条件的多重集是 [19,39] 。
可以证明 2 是满足题目条件的多重集的最小长度。

示例 2:

输入:num = 37, k = 2
输出:-1
解释:个位数字为 2 的整数无法相加得到 37 。

示例 3:

输入:num = 0, k = 7
输出:0
解释:空多重集的和为 0 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int minimumNumbers(int num, int k) { } };

php 解法, 执行用时: 8 ms, 内存消耗: 18.8 MB, 提交时间: 2023-08-22 10:11:12

class Solution {

    /**
     * @param Integer $num
     * @param Integer $k
     * @return Integer
     */
    function minimumNumbers($num, $k) {
        if ( $num == 0 ) return 0;
        for ( $i = 1; $i <= $num && $i * $k <= $num; $i++ ) {
            if ( ($num - $i * $k) % 10 == 0 ) return $i;
        }
        return -1;
    }
}

golang 解法, 执行用时: 0 ms, 内存消耗: 1.9 MB, 提交时间: 2023-08-22 10:09:42

func minimumNumbers(num int, k int) int {
    if num == 0 {
        return 0
    }
    for i := 1; i <= num && i * k <= num; i++ {
        if ( num - i * k ) % 10 == 0 {
            return i
        }
    }
    return -1
}

python3 解法, 执行用时: 48 ms, 内存消耗: 16 MB, 提交时间: 2023-08-22 10:03:57

'''
从小到大枚举 n,找到第一个满足 num−nk 是 10 的倍数的 n。
由于 n 不会超过 num,我们至多枚举到 num 时停止。
注意特判 num=0 的情况,此时返回 0。
'''
class Solution:
    def minimumNumbers(self, num: int, k: int) -> int:
        if num == 0: return 0
        
        for n in range(1, num+1):
            if num - n * k < 0: break
            if (num - n * k) % 10 == 0: return n
        return -1

上一题