题目描述
给你一个整数M和数组N,N中的元素为连续整数,要求根据N中的元素组装成新的数组R,组装规则:
1.R中元素总和加起来等于M
2.R中的元素可以从N中重复选取
3.R中的元素最多只能有1个不在N中,且比N中的数字都要小(不能为负数) 输入描述 第一行输入是连续数组N,采用空格分隔第二行输入数字M 输出描述 输出的是组装办法数量,int类型备注 1≤M≤30 1 ≤ N.length ≤ 1000
示例1
输入 2 5输出
1
说明 只有1种组装办法,就是[2,2,1]
示例2
输入 2 3 5
输出 2说明 共两种组装办法,分别是[2,2,1],[2,3]
解题思路
使用(DFS)来解答,枚举所有可能的组合,对于每一次搜索,分为两种情况:
1.选取当前数值;
2.不选取当前数值。
当前总和超过了m,则终止搜索;当前总和小于等于m且差值小于nums中的最小值,则计数器加1;对于每一个数值,都需要尝试选取和不选取两种情况,进入递归搜索。
参考代码
import java
本文介绍了华为OD机试中的一道题目,要求根据给定的连续整数数组N和目标整数M,通过重复选取数组元素(允许1个不在数组内的较小正整数)组装新数组,使得新数组元素之和等于M。题目提供了示例及解题思路,解题方法是利用深度优先搜索(DFS)枚举所有可能的组合,并在满足条件时更新结果计数。
订阅专栏 解锁全文
7378

被折叠的 条评论
为什么被折叠?



