LeetCode0077-组合

给定两个整数 n 和 k,返回 1 ... 中所有可能的 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);

    }
}

 

posted on 2021-07-18 10:59  cStream  阅读(32)  评论(0)    收藏  举报