| 12345678910111213141516171819202122232425262728293031 | 
							- 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
 
- }
 
 
  |