华为OD机试真题-组装数组【2023Q1】

这篇博客介绍了如何解决华为在线开发者(OD)机试中的一道题目,涉及组装数组的问题。给定一个整数M和包含连续整数的数组N,目标是找到所有使得数组元素之和等于M的组合,允许从N中重复选取元素,最多可以有一个不在N中的较小正整数。博主提供了使用深度优先搜索(DFS)的解题思路和参考代码,并给出了示例输入和输出。
摘要由CSDN通过智能技术生成

题目描述

给你一个整数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;对于每一个数值,都需要尝试选取和不选取两种情况,进入递归搜索。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值