From 9517c0cc2a60d96f16e70eb092dcf3969928a531 Mon Sep 17 00:00:00 2001 From: potrue <126231160+potrue@users.noreply.github.com> Date: Wed, 20 Aug 2025 00:04:24 +0900 Subject: [PATCH] 78. Subsets https://leetcode.com/problems/subsets/description/ --- 78/78.md | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 78/78.md diff --git a/78/78.md b/78/78.md new file mode 100644 index 0000000..287b948 --- /dev/null +++ b/78/78.md @@ -0,0 +1,92 @@ +## 何も見ずに解いてみる + +```cpp +class Solution { +public: + vector> subsets(vector& nums) { + vector> result; + for (int subset = 0; subset < 1 << nums.size(); ++subset) { + vector subset_in_vector; + for (int element = 0; element < nums.size(); ++element) { + if (subset & (1 << element)) { + subset_in_vector.emplace_back(nums[element]); + } + } + result.emplace_back(subset_in_vector); + } + return result; + } +}; +``` + +## 他の人のコードを見てみる + +https://github.com/tokuhirat/LeetCode/pull/51/files +https://github.com/ryosuketc/leetcode_arai60/pull/40 +https://github.com/fhiyo/leetcode/pull/51/files +https://github.com/Ryotaro25/leetcode_first60/pull/55/files + +いろいろなやり方がありますね。 +変数名のつけ方が難しいです。 + +今まで作ったsubsetsを広げていくやり方で書いてみたらこんな感じになりました。 + +```cpp +class Solution { +public: + vector> subsets(vector& nums) { + vector> made_subsets = {{}}; + for (int num : nums) { + int current_size = made_subsets.size(); + for (int i = 0; i < current_size; ++i) { + vector subset = made_subsets[i]; + subset.emplace_back(num); + made_subsets.emplace_back(subset); + } + } + return made_subsets; + } +}; +``` + +そういえば最近気づいたんですがleetcodeの実行環境だと日本語の変数名も使えるみたいですね。 +下のコードどうでしょうか笑 + +```cpp +class Solution { +public: + vector> subsets(vector& 要素たち) { + vector> 今まで作った部分集合 = {{}}; + for (int 要素 : 要素たち) { + int 現時点のサイズ = 今まで作った部分集合.size(); + for (int インデックス = 0; インデックス < 現時点のサイズ; ++インデックス) { + vector 部分集合 = 今まで作った部分集合[インデックス]; + 部分集合.emplace_back(要素); + 今まで作った部分集合.emplace_back(部分集合); + } + } + return 今まで作った部分集合; + } +}; +``` + +## 最終コード + +```cpp +class Solution { +public: + vector> subsets(vector& nums) { + vector> result; + for (int bits = 0; bits < 1 << nums.size(); ++bits) { + vector subset; + for (int bit = 0; bit < nums.size(); ++bit) { + if (bits & (1 << bit)) { + subset.emplace_back(nums[bit]); + } + } + result.emplace_back(subset); + } + return result; + } +}; +```