牛客NC238 加起来和为目标值的组合【中等 DFS C++、Java、Go、PHP】

题目

在这里插入图片描述
题目链接:
https://www.nowcoder.com/practice/172e6420abf84c11840ed6b36a48f8cd

思路

本题是组合问题,相同元素不同排列仍然看作一个结果。
穷经所有的可能子集,若和等于target,加入最终结果集合。
给nums排序是为了方便剪枝,提前结束不必要的递归。

参考答案C++

class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param target int整型* @param nums int整型vector* @return int整型vector<vector<>>*/vector<vector<int> > combinationCount(int target, vector<int>& nums) {//本题是组合问题,相同元素不同排列仍然看作一个结果。//穷经所有的可能子集,若和等于target,加入最终结果集合。//给nums排序是为了方便剪枝,提前结束不必要的递归。std::sort(nums.begin(), nums.end());vector<vector<int>> ans;vector<int> path;dfs(nums, 0, path, target, &ans);return ans;}void dfs(vector<int>& nums, int idx, vector<int> path, int sum,vector<vector<int>>* ans) {if (sum == 0) {vector<int> t;for (int m = 0; m < path.size(); m++) {t.push_back(path[m]);}ans->push_back(t);return;}if (sum < 0)return;for (int i = idx; i < nums.size(); i++) {path.push_back(nums[i]);dfs(nums, i, path, sum - nums[i], ans);path.pop_back();//恢复现场}}
};

参考答案Java

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param target int整型* @param nums int整型一维数组* @return int整型ArrayList<ArrayList<>>*/public ArrayList<ArrayList<Integer>> combinationCount (int target, int[] nums) {//本题是组合问题,相同元素不同排列仍然看作一个结果。//穷经所有的可能子集,若和等于target,加入最终结果集合。//给nums排序是为了方便剪枝,提前结束不必要的递归。Arrays.sort(nums);ArrayList<ArrayList<Integer>> ans = new ArrayList<>();backtrace(nums, 0, new ArrayList<Integer>(), target, ans);return ans;}public void backtrace(int[] nums, int idx, ArrayList<Integer> path, int sum,ArrayList<ArrayList<Integer>> ans) {if (sum == 0) {ans.add(new ArrayList<>(path));return;}if (sum < 0) return;for (int i = idx; i < nums.length ; i++) {path.add(nums[i]);backtrace(nums, i, path, sum - nums[i], ans);path.remove(path.size() - 1); //恢复现场}}
}

参考答案Go

package mainimport "sort"/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param target int整型* @param nums int整型一维数组* @return int整型二维数组*/
func combinationCount(target int, nums []int) [][]int {//本题是组合问题,相同元素不同排列仍然看作一个结果。//穷经所有的可能子集,若和等于target,加入最终结果集合。//给nums排序是为了方便剪枝,提前结束不必要的递归。sort.Ints(nums)ans := [][]int{}dfs(nums, 0, []int{}, target, &ans)return ans
}
func dfs(nums []int, idx int, path []int, sum int, ans *[][]int) {if sum == 0 {t := path[:len(path)]*ans = append(*ans, t)return}if sum < 0 {return}for i := idx; i < len(nums); i++ {path = append(path, nums[i])dfs(nums, i, path, sum-nums[i], ans)size := len(path)path1 := make([]int, size-1)for k := 0; k < size-1; k++ {path1[k] = path[k]}path = path1 //恢复现场}
}

参考答案PHP

<?php/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param target int整型 * @param nums int整型一维数组 * @return int整型二维数组*/
function combinationCount( $target ,  $nums )
{//本题是组合问题,相同元素不同排列仍然看作一个结果。//穷经所有的可能子集,若和等于target,加入最终结果集合。//给nums排序是为了方便剪枝,提前结束不必要的递归。sort($nums);$ans=[];$path = [];dfs($nums,0,$path,$target,$ans);return $ans;
}function dfs($nums,$idx,$path,$sum,&$ans){if($sum ==0){$t = [];foreach ($path as $k=>$v ){$t[$k] =$v;}$ans[count($ans)] = $t;return;}if($sum <0) return;for ($i=$idx;$i<count($nums);$i++){$path[count($path)] = $nums[$i];dfs($nums,$i,$path,$sum-$nums[$i],$ans);$path1 =[];for($k=0;$k<count($path)-1;$k++){$path1[$k] = $path[$k];}$path = $path1; //恢复现场}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/640088.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的宠物领养网站管理系统

基于SpringBootVue的宠物领养网站管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 宠物领养 宠物救助站 宠物论坛 登录界面 管理员界面 摘要 基于Spr…

恶心透了的小日子,害人终害己,国货呼吁关注抵制日本核废水排放

​|日本排放核废水 日本政府决定将福岛第一核电站的核污染水经过处理后排放入海&#xff0c;这一决定引发了多方面的担忧和反对&#xff0c;特别是在周边国家&#xff0c;包括中国和韩国。关于日本排放核污染水这一新闻事件&#xff0c;我们必须首先认识到&#xff0c;核能利用…

ThingsBoard教程(二十九):详细讲解在tb平台下 http协议下的客户端rpc,服务的rpc的使用

客户端rpc 先来说一下简单的客户端rpc, 客户端发起rpc请求,只需要使用post方法调用该接口即可以 http://host:port/api/v1/$ACCESS_TOKEN/rpc请求路径中间的参数 ACCESS_TOKEN 必须是设备的访问令牌。 请求携带的参数如下,二个参数method和params {"method": …

实现游戏地图读取与射击运行

射击代码来源自2D 横向对抗射击游戏&#xff08;by STF&#xff09; - CodeBus 地图读取改装自 瓦片地图编辑器 解决边界检测&#xff0c;实现使用不同像素窗口也能移动不闪退-CSDN博客 // 程序&#xff1a;2D RPG 地图编辑器改游戏读取器 // 作者&#xff1a;民用级脑的研发…

Python网络数据抓取(3):Requests

引言 在这一部分&#xff0c;我们将探讨Python的requests库&#xff0c;并且利用这个库来进行网页数据抓取。那么&#xff0c;我们为何需要这个库&#xff0c;以及怎样利用它呢&#xff1f; requests库是广受大家欢迎的一个库&#xff0c;它是下载次数最多的。这个库使我们能够…

Idea:通义千问插件

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、通义千问大模型 二、程序编写助手 三、Idea安装通义千问插件 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、通义千问大模型…

记录:阿里云服务器网站搭建(3)

Docker安装配置Tomcat 拉取镜像 docker pull tomcat:8启动一个tomcat容器用于拷贝配置文件 docker run -d -p 8080:8080 --name tomcat tomcat:8拷贝容器内tomcat配置文件和日志到本地准备映射 docker cp tomcat:/usr/local/tomcat/conf /mydata/tomcat/confdocker cp tomca…

霸气归来,AKG N9 Hybrid头戴式降噪耳机震撼发布!手边的“大耳”瞬间不香了?

自1947年Rudolf Grike博士和Ernst Pless先生在“音乐之都”维也纳创立AKG以来&#xff0c;品牌已经走过77载辉煌历程&#xff0c;其产品被广泛应用于全球各大巡回演出和录音棚中&#xff0c;为全球音乐爱好者和专业人士提供了无数优质的声音体验。 近日&#xff0c;AKG再度以王…

Tomcat安装步骤及详细配置

目录 一、Tomcat安装准备 1.官网在线下载 二、tomcat安装步骤 1.tomcat安装 三、运行tomcat 1.打开tomcat安装目录 2.打开目录里面的bin文件 3.运行 bin目录的startup.bat文件&#xff08;如果启动闪退&#xff0c;请到5.1目录&#xff09; 4.点击允许访问&#xff08;…

Linux文件chattr/lsattr/Linux权限(搭建权限测试环境实战)引申到内部原理及Linux删除系统文件原理-7539字详谈

企业高薪思维: 每一个阶段什么时候是最重要的&#xff1f;&#xff08;快速定位&#xff09; 1.学习最重要的事情 &#xff08;学生阶段&#xff0c;找工作前阶段&#xff09; 2.家庭&#xff0c;女朋友 &#xff08;工作阶段/学生阶段&#xff0c;学习不受到影响&#xff09; …

OpenCV与AI深度学习 | OpenCV如何读取仪表中的指针刻度

本文来源公众号“OpenCV与AI深度学习”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;OpenCV如何读取仪表中的指针刻度 最近遇到一个问题&#xff0c;如何读取仪表中的指针指向的刻度。 解决方法有多种&#xff0c;比如&#xff…

VBA运行后,为什么excel的三个工作表结果一样?

运行完了excel的三个工作表的结果一样&#xff0c;问题在哪呢&#xff1f; 代码如下&#xff1a; Sub 计算成绩() 计算成绩 Macro i为工作表行号 Dim i, m, total As Integer Dim w1 As Worksheet For m 1 To Worksheets.count Set w1 Worksheets(m) i 2 total 0 …