LeetCode 0077. Combinations Solution in Java, Python, C++, JavaScript, Go & Rust | Explanation + Code

CoderIndeed
0
0077. Combinations

Description

Given two integers n and k, return all possible combinations of k numbers chosen from the range [1, n].

You may return the answer in any order.

 

Example 1:

Input: n = 4, k = 2
Output: [[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]
Explanation: There are 4 choose 2 = 6 total combinations.
Note that combinations are unordered, i.e., [1,2] and [2,1] are considered to be the same combination.

Example 2:

Input: n = 1, k = 1
Output: [[1]]
Explanation: There is 1 choose 1 = 1 total combination.

 

Constraints:

  • 1 <= n <= 20
  • 1 <= k <= n

Solutions

Solution 1: Backtracking (Two Ways)

We design a function dfs(i), which represents starting the search from number i, with the current search path as t, and the answer as ans.

The execution logic of the function dfs(i) is as follows:

  • If the length of the current search path t equals k, then add the current search path to the answer and return.
  • If i \gt n, it means the search has ended, return.
  • Otherwise, we can choose to add the number i to the search path t, and then continue the search, i.e., execute dfs(i + 1), and then remove the number i from the search path t; or we do not add the number i to the search path t, and directly execute dfs(i + 1).

The above method is actually enumerating whether to select the current number or not, and then recursively searching the next number. We can also enumerate the next number j to be selected, where i ≤ j ≤ n. If the next number to be selected is j, then we add the number j to the search path t, and then continue the search, i.e., execute dfs(j + 1), and then remove the number j from the search path t.

In the main function, we start the search from number 1, i.e., execute dfs(1).

The time complexity is (C_n^k × k), and the space complexity is O(k). Here, C_n^k represents the combination number.

Similar problems:

PythonJavaC++GoTypeScriptRustC#
class Solution: def combine(self, n: int, k: int) -> List[List[int]]: def dfs(i: int): if len(t) == k: ans.append(t[:]) return if i > n: return t.append(i) dfs(i + 1) t.pop() dfs(i + 1) ans = [] t = [] dfs(1) return ans(code-box)

Solution 2

PythonJavaC++GoTypeScriptRustC#
class Solution: def combine(self, n: int, k: int) -> List[List[int]]: def dfs(i: int): if len(t) == k: ans.append(t[:]) return if i > n: return for j in range(i, n + 1): t.append(j) dfs(j + 1) t.pop() ans = [] t = [] dfs(1) return ans(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !