Golang每日一练(leetDay0096) 添加运算符、移动零-LMLPHP

目录

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/ 

06-14 08:47