牛客NC358 组合【中等 DFS Java,Go,PHP】

题目

题目链接:

https://www.nowcoder.com/practice/7cfd3675cc964ae6818a771ac97ece5f

思考

	DFS

参考答案Java

java 复制代码
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int整型
     * @param k int整型
     * @return int整型ArrayList<ArrayList<>>
     */
    public ArrayList<ArrayList<Integer>> combine (int n, int k) {
        //dfs
        int[] nums = new int[n];
        for (int i = 0; i < n ; i++) {
            nums[i] = i + 1;
        }
        ArrayList<ArrayList<Integer>> ans = new ArrayList<>();
        dfs(nums, 0, new ArrayList<Integer>(), ans, k);
        return  ans;
    }
    public void dfs(int[] nums, int index, ArrayList<Integer> path,
                    ArrayList<ArrayList<Integer>> ans, int k) {
        if (path.size() == k) {
            ans.add(new ArrayList<>(path));
        }

        for (int i = index; i < nums.length ; i++) {
            path.add(nums[i]);
            dfs(nums, i + 1, path, ans, k);
            path.remove(path.size() - 1); //恢复现场
        }
    }
}

参考答案Go

go 复制代码
package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param n int整型
 * @param k int整型
 * @return int整型二维数组
 */
func combine(n int, k int) [][]int {
	//dfs
	nums := make([]int, n)
	for i := 0; i < n; i++ {
		nums[i] = i + 1
	}

	ans := [][]int{}
	path := []int{}
	dfs(nums, 0, path, &ans, k)
	return ans
}

//dfs:nums:组合的元素数组  index:来到nums的第index位置
func dfs(nums []int, index int, path []int, ans *[][]int, k int) {
	if len(path) == k {
		t := make([]int, len(path))
		for vi, v := range path {
			t[vi] = v
		}
		*ans = append(*ans, t)

		return
	}

	for i := index; i < len(nums); i++ {
		path = append(path, nums[i])
		dfs(nums, i+1, path, ans, k)
		path = path[:len(path)-1] //恢复现场
	}
}

参考答案PHP

php 复制代码
<?php


/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 
 * @param k int整型 
 * @return int整型二维数组
 */
function combine( $n ,  $k )
{
     //dfs
    $nums = array();
    for ($i = 0; $i < $n; $i++) {
        $nums[$i] = $i + 1;
    }

    $ans = array();
    $path = array();
    dfs($nums, 0, $path, $ans, $k);
    return $ans;
}

function dfs($nums, $index, $path, &$ans, $k)
{
    if (count($path) == $k) {
        $t = array();
        for ($i = 0; $i < $k; $i++) {
            $t[$i] = $path[$i];
        }
        array_push($ans, $t);
        return;
    }

    for ($i = $index; $i < count($nums); $i++) {
        array_push($path, $nums[$i]);
        dfs($nums, $i + 1, $path, $ans, $k);

        array_pop($path); //恢复现场
    }
}
相关推荐
passer__jw7679 分钟前
【LeetCode】【算法】283. 移动零
数据结构·算法·leetcode
Ocean☾16 分钟前
前端基础-html-注册界面
前端·算法·html
顶呱呱程序24 分钟前
2-143 基于matlab-GUI的脉冲响应不变法实现音频滤波功能
算法·matlab·音视频·matlab-gui·音频滤波·脉冲响应不变法
Tianyanxiao1 小时前
如何利用探商宝精准营销,抓住行业机遇——以AI技术与大数据推动企业信息精准筛选
大数据·人工智能·科技·数据分析·深度优先·零售
爱吃生蚝的于勒1 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~1 小时前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
王哈哈^_^1 小时前
【数据集】【YOLO】【VOC】目标检测数据集,查找数据集,yolo目标检测算法详细实战训练步骤!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
星沁城1 小时前
240. 搜索二维矩阵 II
java·线性代数·算法·leetcode·矩阵
脉牛杂德2 小时前
多项式加法——C语言
数据结构·c++·算法
legend_jz2 小时前
STL--哈希
c++·算法·哈希算法