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

题目描述

给你一个整数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.util
经验分享 程序员 微信小程序 职场和发展