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

简介: Golang每日一练(leetDay0096) 添加运算符、移动零

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)暂停更


目录
相关文章
|
2月前
|
存储 Python
链表中插入节点
链表中插入节点
|
23天前
|
存储 人工智能 测试技术
每日练习之排序——链表的合并;完全背包—— 兑换零钱
每日练习之排序——链表的合并;完全背包—— 兑换零钱
14 2
|
5天前
|
算法
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
|
2月前
|
存储 Python
删除链表节点详解
删除链表节点详解
|
2月前
|
存储 Python
链表中删除节点
链表中删除节点
|
11天前
|
Go
Go语言每日一练链表篇(一)
Go语言每日一练链表篇(一)
|
2月前
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点.
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点
25 1
|
16天前
24. 两两交换链表中的节点
24. 两两交换链表中的节点
|
16天前
23.合并K个升序链表
23.合并K个升序链表
|
19天前
|
存储
删除链表的节点
删除链表的节点
10 0