public List<List<Integer>> combine(int n, int k) {
            List<List<Integer>> result = new ArrayList<List<Integer>>();

            if (k > n || k == 0) {
                return result;
            }

            if (k == 1) {
                for (int i = 1; i <= n; i++) {
                    List<Integer> list = new ArrayList<Integer>();
                    list.add(i);
                    result.add(list);
                }
                return result;
            }

            int cur = n;
            while (cur > k) {
                for (List<Integer> item : combine(cur - 1, k - 1)) {
                    item.add(cur);
                    result.add(item);
                }
                cur--;
            }

            List<Integer> list = new ArrayList<Integer>();
            for (int i = 1; i <= k; i++) {
                list.add(i);
            }
            result.add(list);
            return result;
        }