diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 102. \345\212\240\345\207\217\347\232\204\347\233\256\346\240\207\345\200\274/README.md" "b/lcof2/\345\211\221\346\214\207 Offer II 102. \345\212\240\345\207\217\347\232\204\347\233\256\346\240\207\345\200\274/README.md" index 8c6e72e679a66..e36e94e76dd4e 100644 --- "a/lcof2/\345\211\221\346\214\207 Offer II 102. \345\212\240\345\207\217\347\232\204\347\233\256\346\240\207\345\200\274/README.md" +++ "b/lcof2/\345\211\221\346\214\207 Offer II 102. \345\212\240\345\207\217\347\232\204\347\233\256\346\240\207\345\200\274/README.md" @@ -241,6 +241,29 @@ func findTargetSumWays(nums []int, target int) int { } ``` +#### Swift + +```swift +class Solution { + func findTargetSumWays(_ nums: [Int], _ target: Int) -> Int { + let s = nums.reduce(0, +) + if s - target < 0 || (s - target) % 2 != 0 { + return 0 + } + let target = (s - target) / 2 + var dp = [Int](repeating: 0, count: target + 1) + dp[0] = 1 + + for num in nums { + for j in stride(from: target, through: num, by: -1) { + dp[j] += dp[j - num] + } + } + return dp[target] + } +} +``` + diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 102. \345\212\240\345\207\217\347\232\204\347\233\256\346\240\207\345\200\274/Solution2.swift" "b/lcof2/\345\211\221\346\214\207 Offer II 102. \345\212\240\345\207\217\347\232\204\347\233\256\346\240\207\345\200\274/Solution2.swift" new file mode 100644 index 0000000000000..399bae61ffbb6 --- /dev/null +++ "b/lcof2/\345\211\221\346\214\207 Offer II 102. \345\212\240\345\207\217\347\232\204\347\233\256\346\240\207\345\200\274/Solution2.swift" @@ -0,0 +1,18 @@ +class Solution { + func findTargetSumWays(_ nums: [Int], _ target: Int) -> Int { + let s = nums.reduce(0, +) + if s - target < 0 || (s - target) % 2 != 0 { + return 0 + } + let target = (s - target) / 2 + var dp = [Int](repeating: 0, count: target + 1) + dp[0] = 1 + + for num in nums { + for j in stride(from: target, through: num, by: -1) { + dp[j] += dp[j - num] + } + } + return dp[target] + } +} \ No newline at end of file