From 6e3ba1cf30262fd20274564e5fd1e80d687fb5e5 Mon Sep 17 00:00:00 2001 From: wisdompeak Date: Thu, 10 Feb 2022 10:32:50 -0800 Subject: [PATCH] Create 416.Partition-Equal-Subset-Sum_dfs_v2.cpp --- .../416.Partition-Equal-Subset-Sum_dfs_v2.cpp | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Dynamic_Programming/416.Partition-Equal-Subset-Sum/416.Partition-Equal-Subset-Sum_dfs_v2.cpp diff --git a/Dynamic_Programming/416.Partition-Equal-Subset-Sum/416.Partition-Equal-Subset-Sum_dfs_v2.cpp b/Dynamic_Programming/416.Partition-Equal-Subset-Sum/416.Partition-Equal-Subset-Sum_dfs_v2.cpp new file mode 100644 index 000000000..0329802fe --- /dev/null +++ b/Dynamic_Programming/416.Partition-Equal-Subset-Sum/416.Partition-Equal-Subset-Sum_dfs_v2.cpp @@ -0,0 +1,32 @@ +class Solution { + unordered_setvisited; +public: + bool canPartition(vector& nums) + { + int sum = accumulate(nums.begin(), nums.end(), 0); + if (sum%2!=0) return false; + return dfs(nums, sum/2, 0, 0); + } + + bool dfs(vector& nums, int targetSum, int i, int sum) + { + int hash = sum * 20005 + i; + if (visited.find(hash)!=visited.end()) + return false; + + if (sum== targetSum) + return true; + + if (sum> targetSum) + return false; + + if (i == nums.size()) + return false; + + if (dfs(nums, targetSum, i + 1, sum+ nums[i]) || dfs(nums, targetSum, i + 1, sum)) + return true; + + visited.insert(hash); + return false; + } +};