华为OD机试 2023B卷题库疯狂收录中,刷题点这里
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
给你一个整数M和数组N,N中的元素为连续整数,要求根据N中的元素组装成新的数组R。
组装规则:
第一行输入是连续数组N,采用空格分隔;
第二行输入数字M;
输出的是组装办法数量,int类型。
1 <= N.length <= 30
1 <= N.length <= 1000
N
和数字 M
。N
转换为整数数组 arr
。sum
表示组装办法数量,初始值为 0。min
表示数组 N
中的最小值,初始值为正无穷大。N
,将每个元素转换为整数,并更新 min
的值为数组 N
的最小值。get(0, arr, M, 0)
,计算组装办法数量。get
中,如果当前新数组 R
的数字之和等于 M
,则将 sum
加 1。R
的数字之和大于 M
,则返回。M - rSum <= min - 1
,表示剩余的数字和已经小于等于 min - 1
,则将 sum
加 1,并返回。idx
开始遍历数组 N
,递归调用 get
函数,更新索引 idx
和新数组 R
的数字之和 rSum
。sum
。function countAssemblyMethods(N, M) {
let sum = 0;
let min = Infinity;
function get(idx, n, M, rSum) {
if (rSum === M) {
sum++;
return;
}
if (rSum > M) {
return;
}
if (M - rSum <= min - 1) {
sum++;
return;
}
for (let i = idx; i < n.length; i++) {
get(i, n, M, rSum + n[i]);
}
}
const arr = N.split(" ").map(Number);
min = Math.min(...arr);
get(0, arr, M, 0);
return sum;
}
2 3 5
8
5
下一篇:华为OD机试真题 JavaScript 实现【贪心的商人】【2023Q1 100分】
本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。