77. Combinations

来源:互联网 发布:淘宝手机单怎么刷 编辑:程序博客网 时间:2024/05/17 08:59

Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.

For example,
If n = 4 and k = 2, a solution is:

[  [2,4],  [3,4],  [2,3],  [1,2],  [1,3],  [1,4],]

Subscribe to see which companies asked this question

public class Solution {    public List<List<Integer>> combine(int n, int k) {                List <Integer> r = new ArrayList <Integer> ();        List <List<Integer>> ret = new ArrayList <List<Integer>> ();        if(k>n)return ret;        for(int i = 1;i<=k;i++){            r.add(i);        }        int cur = k-1;        List <Integer> c = new ArrayList <Integer> ();        c.addAll(r);        ret.add(c);        // r.remove(0);        // r.add(2);        // ret.add(r);        // return ret;        while(true){            if(r.get(cur)==(n-k+cur+1)){            while(r.get(cur)==(n-k+cur+1)){                cur--;                if(cur<0)return ret;            }            for(int i = k-1;i>cur;i--){                r.remove(i);            }            int a = r.get(cur);            r.remove(cur);                        for(int i = cur;i<=k-1;i++){                a++;                r.add(a);            }            cur = k-1;            List <Integer> x = new ArrayList <Integer> ();                x.addAll(r);                 ret.add(x);            continue;            }else{                int b =r.get(cur);                r.remove(cur);                r.add(b+1);                List <Integer> x = new ArrayList <Integer> ();                x.addAll(r);                 ret.add(x);            }                   }     }}

0 0
原创粉丝点击