Golang每日一练(leetDay0015)

简介: Golang每日一练(leetDay0015)

43. 字符串相乘 Multiply Strings


给定两个以字符串形式表示的非负整数 num1num2,返回 num1num2 的乘积,它们的乘积也表示为字符串形式。


注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。


示例 1:

输入: num1 = "2", num2 = "3"

输出: "6"


示例 2:

输入: num1 = "123", num2 = "456"

输出: "56088"


提示:

   1 <= num1.length, num2.length <= 200

   num1 和 num2 只能由数字组成。

   num1 和 num2 都不包含任何前导零,除了数字0本身。


代码:

package main
import "fmt"
func multiply(num1 string, num2 string) string {
  if num1 == "0" || num2 == "0" {
    return "0"
  }
  m, n := len(num1), len(num2)
  ansArr := make([]int, m+n)
  for i := m - 1; i >= 0; i-- {
    x := int(num1[i] - '0')
    for j := n - 1; j >= 0; j-- {
      y := int(num2[j] - '0')
      ansArr[i+j+1] += x * y
    }
  }
  for i := m + n - 1; i > 0; i-- {
    ansArr[i-1] += ansArr[i] / 10
    ansArr[i] %= 10
  }
  idx := 0
  for ansArr[idx] == 0 {
    idx++
  }
  ansBytes := make([]byte, m+n-idx)
  for i := 0; i < m+n-idx; i++ {
    ansBytes[i] = byte(ansArr[idx+i] + '0')
  }
  return string(ansBytes)
}
func main() {
  fmt.Println(multiply("123", "456"))
}


输出:

56088


44. 通配符匹配 Wildcard Matching


给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?''*' 的通配符匹配。


'?' 可以匹配任何单个字符。

'*' 可以匹配任意字符串(包括空字符串)。

两个字符串完全匹配才算匹配成功。

说明:

   s 可能为空,且只包含从 a-z 的小写字母。

   p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。

示例 1:

输入:

s = "aa"

p = "a"

输出: false

解释: "a" 无法匹配 "aa" 整个字符串。


示例 2:

输入:

s = "aa"

p = "*"

输出: true

解释: '*' 可以匹配任意字符串。


示例 3:

输入:

s = "cb"

p = "?a"

输出: false

解释: '?' 可以匹配 'c', 但第二个 'a' 无法匹配 'b'。


示例 4:

输入:

s = "adceb"

p = "*a*b"

输出: true

解释: 第一个 '*' 可以匹配空字符串, 第二个 '*' 可以匹配字符串 "dce".


示例 5:

输入:

s = "acdcb"

p = "a*c?b"

输出: false


代码:

package main
import "fmt"
func isMatch(s string, p string) bool {
  si, pi := 0, 0
  sSi, pSi := -1, -1
  for si < len(s) {
    if pi < len(p) && (s[si] == p[pi] || p[pi] == '?') {
      si++
      pi++
    } else if pi < len(p) && p[pi] == '*' {
      sSi = si
      pSi = pi
      pi++
    } else if pSi == -1 {
      return false
    } else {
      sSi++
      si = sSi
      pi = pSi + 1
    }
  }
  for pi < len(p) && p[pi] == '*' {
    pi++
  }
  return pi == len(p)
}
func main() {
  fmt.Println(isMatch("aa", "*"))
  fmt.Println(isMatch("adceb", "*a*b"))
  fmt.Println(isMatch("acdcd", "a*c?b"))
}


输出:

true

true

false


45. 跳跃游戏 II Jump Game II


给你一个非负整数数组 nums ,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

假设你总是可以到达数组的最后一个位置。


示例 1:

输入: nums = [2,3,1,1,4]

输出: 2

解释: 跳到最后一个位置的最小跳跃数是 2。

    从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。


示例 2:

输入: nums = [2,3,0,1,4]

输出: 2

提示:

   1 <= nums.length <= 10^4

   0 <= nums[i] <= 1000


代码:

package main
import "fmt"
func jump(nums []int) int {
  end, maxPos, steps := 0, 0, 0
  for i := 0; i < len(nums)-1; i++ {
    maxPos = max(maxPos, i+nums[i])
    if i == end {
      end = maxPos
      steps++
    }
  }
  return steps
}
func max(a, b int) int {
  if a > b {
    return a
  }
  return b
}
func main() {
  fmt.Println(jump([]int{2, 3, 1, 1, 4}))
  fmt.Println(jump([]int{2, 3, 0, 1, 4}))
}


输出:

2

2


目录
相关文章
|
Shell Linux 算法
Shell编程——弱数据类型的脚本语言快速入门指南
Shell编程——弱数据类型的脚本语言快速入门指南
174 0
Shell编程——弱数据类型的脚本语言快速入门指南
|
Go Linux Shell
Linux 终端命令之文件浏览(2) more
Linux 终端命令之文件浏览(2) more
122 0
Linux 终端命令之文件浏览(2) more
|
Shell 机器学习/深度学习 Linux
Linux 终端操作命令(2)内部命令
Linux 终端操作命令(2)内部命令
226 0
Linux 终端操作命令(2)内部命令
|
C++ 算法 存储
力扣 C++|一题多解之动态规划专题(2)
力扣 C++|一题多解之动态规划专题(2)
175 0
力扣 C++|一题多解之动态规划专题(2)
|
Python 索引
Python Numpy入门基础(一)创建数组
Python Numpy入门基础(一)创建数组
204 0
Python Numpy入门基础(一)创建数组
|
Java 容器 程序员
Java语言程序设计试卷6套
Java语言程序设计试卷6套
1071 0
Java语言程序设计试卷6套
|
Java Go C++
Golang每日一练(leetDay0120) 反转字符串中的元音字母、前K个高频元素
Golang每日一练(leetDay0120) 反转字符串中的元音字母、前K个高频元素
179 0
Golang每日一练(leetDay0120) 反转字符串中的元音字母、前K个高频元素
|
Go 机器学习/深度学习 Rust
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
250 0
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
|
Java Go C++
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
167 0
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
|
Java Go C++
Golang每日一练(leetDay0117) 打家劫舍III、比特位计数
Golang每日一练(leetDay0117) 打家劫舍III、比特位计数
140 0
Golang每日一练(leetDay0117) 打家劫舍III、比特位计数