LeetCode0077-组合
给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
https://leetcode-cn.com/problems/combinations/
回溯算法的经典应用。
package codepackage; import com.sun.org.apache.bcel.internal.generic.ARETURN; import java.util.ArrayList; import java.util.List; public class letcode077 { // 存放符合条件结果的集合 private static List<List<Integer>> result = new ArrayList<List<Integer>>(); // 存放符合条件结果 private static List<Integer> temp = new ArrayList<Integer>(); public static List<List<Integer>> combine(int n, int k) { if(k==0) {return result;} backTracking(n,k,1); return result; } public static void backTracking(int n ,int k ,int startIndex){ if(temp.size()==k){ //新建一个引用变量来实时存储每一次temp变量的值 result.add(new ArrayList(temp)); // 如果像下面这样写,最后result结果为[[], [], [], [], [], []],因为temp是成员变量(全局变量),在最后temp指向为空 //result.add(temp); return; } for(int i =startIndex;i<=n;i++){ temp.add(i); backTracking(n,k,i+1); temp.remove(temp.size()-1); } } public static void main(String[] args) { List<List<Integer>> result = new ArrayList<>(); result = combine(4,2); System.out.println(result); } }