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

本文介绍了华为OD机试中的一道题目,要求根据给定的连续整数数组N和目标整数M,通过重复选取数组元素(允许1个不在数组内的较小正整数)组装新数组,使得新数组元素之和等于M。题目提供了示例及解题思路,解题方法是利用深度优先搜索(DFS)枚举所有可能的组合,并在满足条件时更新结果计数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

给你一个整数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、付费专栏及课程。

余额充值