Algorithm/문제풀이
[Leetcode] 46. Permutations 문제 풀이
bluespacedev
2021. 9. 9. 22:43
https://leetcode.com/problems/permutations/
Permutations - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
문제 내용
주어진 숫자 배열에서 모든 조합을 구하는 문제
Example 1:
Input: nums = [1,2,3]
Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
문제 풀이
divide & conquer 방식으로 풀었다.
N개의 길이가 있을 때, N개의 모든 조합을 출력하게 했다.
N개중에 하나를 택하면, N-1개의 수가 남는다.
N-1개로 분할된 것을 다시 돌리면 된다.
N-1의 모든 조합에 1개를 모두 추가하는 방식으로 구했다.
class Solution {
public:
vector<vector<int>> per(vector<int>& nums, vector<bool>& visit, int size) {
vector<vector<int>> ans;
if (size == nums.size() - 1) {
for (int i = 0; i < nums.size(); ++i) {
if (visit[i])
continue;
ans.push_back({nums[i]});
}
}
else {
for (int i = 0; i < nums.size(); ++i) {
if (visit[i])
continue;
visit[i] = true;
auto child = per(nums, visit, size+1);
for (auto& c : child) {
c.insert(c.begin(), nums[i]);
ans.push_back(c);
}
visit[i] = false;
}
}
return ans;
}
vector<vector<int>> permute(vector<int>& nums) {
vector<bool> visit(nums.size(), false);
return per(nums, visit, 0);
}
};