目录
282. 给表达式添加运算符 Expression Add Operators 🌟🌟🌟
283. 移动零 Move Zeroes 🌟
🌟 每日一练刷题专栏 🌟
Rust每日一练 专栏
Golang每日一练 专栏
Python每日一练 专栏
C/C++每日一练 专栏
Java每日一练 专栏
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)暂停更 |