Advertisement
ogv

Untitled

ogv
Sep 19th, 2019
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.81 KB | None | 0 0
  1. // Your runtime beats 87.12 % of java
  2. class Solution {
  3.     public List<List<Integer>> combine(int n, int k) {
  4.         List<List<Integer>> results = new ArrayList<List<Integer>>();
  5.         if (k > n) return results;
  6.        
  7.         int[] current = new int[k];
  8.         for (int i=0; i < k; i++) current[i] = i + 1;
  9.        
  10.         for(;;) {
  11.             List<Integer> result = new ArrayList<>();
  12.             for (int x: current) {
  13.                 result.add(x);
  14.             }
  15.             results.add(result);
  16.            
  17.             int p = k - 1;
  18.             while (p >= 0 && current[p] + k - p > n) {
  19.                 p--;
  20.             }
  21.            
  22.             if (p < 0) break;
  23.             current[p] += 1;
  24.             for (int i = p + 1; i < k; i++) current[i] = current[i - 1] + 1;
  25.         }
  26.    
  27.         return results;
  28.     }
  29. }
  30.  
  31. // Runtime: 10 ms, faster than 75.67% of Java online submissions for Combinations.
  32. // Memory Usage: 39.3 MB, less than 82.61% of Java online submissions for Combinations.
  33. class Solution {
  34.     public List<List<Integer>> combine(int n, int k) {
  35.         List<List<Integer>> results = new ArrayList<List<Integer>>();
  36.         int[] current = new int[k];
  37.         combine(n, k, 0, current, results);
  38.         return results;
  39.     }
  40.    
  41.     private void combine(int n, int k, int pos, int[] current, List<List<Integer>> results) {
  42.         if (pos >= k) {
  43.             List<Integer> result = new ArrayList<Integer>();
  44.             for (int x: current) {
  45.                 result.add(x);
  46.             }
  47.             results.add(result);
  48.             return;
  49.         }
  50.        
  51.         int from = (pos == 0) ? 1: current[pos-1] + 1;
  52.         for (int i = from; i <= n; i++) {
  53.             current[pos] = i;
  54.             combine(n, k, pos + 1, current, results);
  55.         }
  56.     }
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement