|
@@ -0,0 +1,31 @@
|
|
|
+func makesquare(nums []int) bool {
|
|
|
+ n := len(nums)
|
|
|
+ if n < 4 {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ sum := 0
|
|
|
+ for _, i := range nums {
|
|
|
+ sum += i
|
|
|
+ }
|
|
|
+ if sum%4 != 0 {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ sort.Sort(sort.Reverse(sort.IntSlice(nums))) // It's super effective!
|
|
|
+ return dfs(nums, make([]int, 4), n, 0, sum/4)
|
|
|
+}
|
|
|
+
|
|
|
+func dfs(nums []int, sums []int, n int, idx int, target int) bool {
|
|
|
+ if idx == n {
|
|
|
+ return sums[0] == target && sums[1] == target && sums[2] == target
|
|
|
+ }
|
|
|
+ for i := 0; i < 4; i++ {
|
|
|
+ if sums[i]+nums[idx] <= target {
|
|
|
+ sums[i] += nums[idx]
|
|
|
+ if dfs(nums, sums, n, idx+1, target) {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ sums[i] -= nums[idx]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false
|
|
|
+}
|