282. 给表达式添加运算符 Expression Add Operators
给定一个仅包含数字 0-9
的字符串 num
和一个目标值整数 target
,在 num
的数字之间添加 二元 运算符(不是一元)+
、-
或 *
,返回 所有 能够得到 target
的表达式。
注意,返回表达式中的操作数 不应该 包含前导零。
示例 1:
输入: num = "123", target = 6
输出: ["1+2+3", "1*2*3"]
解释: “1*2*3” 和 “1+2+3” 的值都是6。
示例 2:
输入: num = "232", target = 8
输出: ["2*3+2", "2+3*2"]
解释: “2*3+2” 和 “2+3*2” 的值都是8。
示例 3:
输入: num = "3456237490", target = 9191
输出: []
解释: 表达式 “3456237490” 无法得到 9191 。
提示:
1 <= num.length <= 10
num
仅含数字-2^31 <= target <= 2^31 - 1
代码:
package main import ( "fmt" "strconv" ) func addOperators(num string, target int) []string { res := []string{} var dfs func(expr string, cur, prev, sum int) dfs = func(expr string, cur, prev, sum int) { if cur == len(num) { if sum == target { res = append(res, expr) } return } for i := cur; i < len(num); i++ { if i != cur && num[cur] == '0' { break } val, _ := strconv.Atoi(num[cur : i+1]) if cur == 0 { dfs(num[:i+1], i+1, val, val) continue } dfs(expr+"+"+num[cur:i+1], i+1, val, sum+val) dfs(expr+"-"+num[cur:i+1], i+1, -val, sum-val) dfs(expr+"*"+num[cur:i+1], i+1, prev*val, sum-prev+prev*val) } } dfs("", 0, 0, 0) return res } func main() { fmt.Println(addOperators("123", 6)) // ["1+2+3" "1*2*3"] fmt.Println(addOperators("232", 8)) // ["2+3*2" "2*3+2"] fmt.Println(addOperators("3456237490", 9191)) // [] }
输出:
[1+2+3 1*2*3]
[2+3*2 2*3+2]
[]
283. 移动零 Move Zeroes
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]
提示:
1 <= nums.length <= 10^4
-2^31 <= nums[i] <= 2^31 - 1
进阶:你能尽量减少完成的操作次数吗?
代码:
package main import "fmt" func moveZeroes(nums []int) { n := len(nums) j := 0 // 非零元素应该插入的位置 for i := 0; i < n; i++ { if nums[i] != 0 { nums[j], nums[i] = nums[i], nums[j] // 交换位置 j++ } } } func moveZeroes2(nums []int) { n := len(nums) j := 0 // 非零元素的个数 for i := 0; i < n; i++ { if nums[i] != 0 { nums[j] = nums[i] if i != j { nums[i] = 0 } j++ } } } func main() { nums := []int{0, 1, 0, 3, 12} moveZeroes(nums) fmt.Println(nums) // [1 3 12 0 0] nums = []int{0, 1, 0, 3, 12} moveZeroes2(nums) fmt.Println(nums) // [1 3 12 0 0] nums2 := []int{0} moveZeroes2(nums2) fmt.Println(nums2) // [0] }
输出:
[1 3 12 0 0]
[1 3 12 0 0]
[0]
🌟 每日一练刷题专栏 🌟
✨持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
☸ 主页:https://hannyang.blog.csdn.net/
Rust每日一练 专栏 (2023.5.16~)更新中... |
|
Golang每日一练 专栏 (2023.3.11~)更新中... |
|
Python每日一练 专栏 (2023.2.18~2023.5.18)暂停更 |
|
C/C++每日一练 专栏 (2023.2.18~2023.5.18)暂停更 |
|
Java每日一练 专栏 (2023.3.11~2023.5.18)暂停更 |