123456789101112131415161718192021222324252627282930 |
- type ints []int
- func (is ints) Len() int { return len(is) }
- func (is ints) Less(i, j int) bool { return is[j] < is[i] }
- func (is ints) Swap(i, j int) { is[i], is[j] = is[j], is[i] }
- func canPartition(nums []int) (ans bool) {
- sum := 0
- for _, i := range nums {
- sum += i
- }
- if sum&1 == 1 {
- return false
- }
- sort.Sort(ints(nums))
- dfs(nums, len(nums), sum/2, 0, 0, 0, &ans)
- return
- }
- func dfs(nums []int, n, sum, i, p1, p2 int, ans *bool) {
- if *ans == true || sum < p1 || sum < p2 {
- return
- } else if i == n {
- *ans = p1 == p2
- return
- }
- dfs(nums, n, sum, i+1, p1+nums[i], p2, ans)
- dfs(nums, n, sum, i+1, p1, p2+nums[i], ans)
- }
|