MarsCode-二分数字组合
本文最后更新于:2024年11月3日 下午
二分数字组合
问题描述
小F面临一个有趣的挑战:给定一个数组,她需要将数组中的数字分为两组。分组的目标是使得一组数字的和的个位数等于给定的 A,另一组数字的和的个位数等于给定的 B。除此之外,还有一种特殊情况允许其中一组为空,但剩余数字和的个位数必须等于 A 或 B。小F需要计算所有可能的划分方式。
例如,对于数组 [1, 1, 1]
和目标 A = 1,B = 2,可行的划分包括三种:每个 1 单独作为一组,其余两个 1 形成另一组。如果 A = 3,B = 5,当所有数字加和的个位数为 3 或 5 时,可以有一组为非空,另一组为空。
测试样例
样例1:
输入:
n = 3,A = 1,B = 2,array_a = [1, 1, 1]
输出:3
样例2:
输入:
n = 3,A = 3,B = 5,array_a = [1, 1, 1]
输出:1
样例3:
输入:
n = 2,A = 1,B = 1,array_a = [1, 1]
输出:2
样例4:
输入:
n = 5,A = 3,B = 7,array_a = [2, 3, 5, 7, 9]
输出:0
题解
解法一 DFS
1 |
|
时间复杂度$O(2^n)$,出现超时
解法二 动态规划
1 |
|
时间复杂度:O(n * 10 * 10)
,因为我们需要遍历每个数字,并在 10 个 modA
和 10 个 modB
状态中更新。
空间复杂度:O(n * 10 * 10)
,存储动态规划表。
MarsCode-二分数字组合
https://furthur509.github.io/2024/11/03/Marscode-二分数字组合/