LeetCode-Combinations
阿新 • • 發佈:2018-11-01
一、Description
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.
題目大意:
給定一個n和k,返回所有長度為k的1-n的組合。
Example:
Input: n = 4, k = 2 Output: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
二、Analyzation
這個題第一想法就是DFS,通過一個temp不斷地加入for迴圈中所有可能出現的數字,直到遞迴層數等於k,則將temp加入到list中,最後返回list即可。
三、Accepted code
class Solution { public List<List<Integer>> combine(int n, int k) { List<List<Integer>> list = new ArrayList<List<Integer>>(); if (k <= 0) { return list; } dfs(1, n, k, list, new ArrayList<Integer>()); return list; } public void dfs(int index, int n, int k, List<List<Integer>> list, List<Integer> temp) { if (k == 0) { list.add(new ArrayList<Integer>(temp)); return ; } for (int i = index; i <= n; i++) { temp.add(i); dfs(i + 1, n, k - 1, list, temp); temp.remove(temp.size() - 1); } } }