/*
难度:中等
给定一个整数数组和一个整数target,向数组中的每个整数前添加 + 或者 - ,然后串联起来所有整数,可以构造一个表达式,
返回可以通过上述方法构造的、运算结果等于target的不同表达式的数目
示例:
输入 nums=[1,1,1,1,1], target=3
输出 5
*/
extension Daily {
static func test_leetcode494() {
// let nums = [1,1,1,1,1]; let target = 3
// let nums = [1000]; let target = -1000
// let nums = [0,0,0,0,0,0,0,0,1]; let target = 1
let nums = [1,2,1]; let target = 0
// Daily.leetcode494_2(nums: nums, target: target)
let res = Daily.leetcode494(nums: nums, target: target)
print("结果 \(res)")
}
/*
a + b = sum
a - b = target
a = (sum + target)/2
*/
static func leetcode494(nums: [Int], target: Int) -> Int {
if nums.count < 1 {
return 0
}
var sum = 0
for item in nums {
sum += item
}
if (sum + target) % 2 == 1 {
return 0
}
let dst = (sum + target)/2
var thisLine = Array(repeating: 0, count: dst + 1 )
thisLine[0] = 1
for idx1 in 0..<nums.count {
let current = nums[idx1]
var j = dst
while j >= current {
thisLine[j] = thisLine[j] + thisLine[j - current]
j -= 1
}
}
return thisLine[dst]
}
}
【LeetCode 494】利用 +/- 使表达式成立
最新推荐文章于 2022-03-25 12:59:24 发布