题目
题目链接:
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); //恢复现场
}
}