Golang每日一练(leetDay0022)

这篇具有很好参考价值的文章主要介绍了Golang每日一练(leetDay0022)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Golang每日一练(leetDay0022)

目录

64. 最小路径和 Minimum Path Sum  🌟🌟

65. 有效数字 Valid Number  🌟🌟🌟

66. 加一 Plus One  🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


64. 最小路径和 Minimum Path Sum

给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例 1:

Golang每日一练(leetDay0022)

输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:7
解释:因为路径 1→3→1→1→1 的总和最小。

示例 2:

输入:grid = [[1,2,3],[4,5,6]]
输出:12

提示:

  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 200
  • 0 <= grid[i][j] <= 100

代码1:动态规划

package main

import (
	"fmt"
)

func minPathSum(grid [][]int) int {
	m, n := len(grid), len(grid[0])
	dp := make([][]int, m)
	for i := range dp {
		dp[i] = make([]int, n)
	}
	dp[0][0] = grid[0][0]
	for i := 1; i < m; i++ {
		dp[i][0] = dp[i-1][0] + grid[i][0]
	}
	for j := 1; j < n; j++ {
		dp[0][j] = dp[0][j-1] + grid[0][j]
	}
	for i := 1; i < m; i++ {
		for j := 1; j < n; j++ {
			dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j]
		}
	}
	return dp[m-1][n-1]
}

func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}

func main() {
	grid := [][]int{{1, 3, 1}, {1, 5, 1}, {4, 2, 1}}
	fmt.Println(minPathSum(grid))

	grid = [][]int{{1, 2, 3}, {4, 5, 6}}
	fmt.Println(minPathSum(grid))
}

输出:

7
12

代码2:DFS

package main

import (
	"fmt"
)

func minPathSum(grid [][]int) int {
	m, n := len(grid), len(grid[0])
	return dfs(grid, m-1, n-1)
}

func dfs(grid [][]int, i, j int) int {
	if i == 0 && j == 0 {
		return grid[0][0]
	}
	res, left := 1<<31, 1<<31
	if i > 0 {
		res = dfs(grid, i-1, j)
	}
	if j > 0 {
		left = dfs(grid, i, j-1)
	}
	if res > left {
		res = left
	}
	return res + grid[i][j]
}

func main() {
	grid := [][]int{{1, 3, 1}, {1, 5, 1}, {4, 2, 1}}
	fmt.Println(minPathSum(grid))

	grid = [][]int{{1, 2, 3}, {4, 5, 6}}
	fmt.Println(minPathSum(grid))
}

 写成闭包函数:

package main

import (
	"fmt"
)

func minPathSum(grid [][]int) int {
	var dfs func(i, j int) int
	dfs = func(i, j int) int {
		if i == 0 && j == 0 {
			return grid[0][0]
		}
		res, left := 1<<31, 1<<31
		if i > 0 {
			res = dfs(i-1, j)
		}
		if j > 0 {
			left = dfs(i, j-1)
		}
		if res > left {
			res = left
		}
		return res + grid[i][j]
	}
	return dfs(len(grid)-1, len(grid[0])-1)
}

func main() {
	grid := [][]int{{1, 3, 1}, {1, 5, 1}, {4, 2, 1}}
	fmt.Println(minPathSum(grid))

	grid = [][]int{{1, 2, 3}, {4, 5, 6}}
	fmt.Println(minPathSum(grid))
}

65. 有效数字 Valid Number

有效数字(按顺序)可以分成以下几个部分:

  1. 一个 小数 或者 整数
  2. (可选)一个 'e' 或 'E' ,后面跟着一个 整数

小数(按顺序)可以分成以下几个部分:

  1. (可选)一个符号字符('+' 或 '-'
  2. 下述格式之一:
    1. 至少一位数字,后面跟着一个点 '.'
    2. 至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
    3. 一个点 '.' ,后面跟着至少一位数字

整数(按顺序)可以分成以下几个部分:

  1. (可选)一个符号字符('+' 或 '-'
  2. 至少一位数字

部分有效数字列举如下:["2", "0089", "-0.1", "+3.14", "4.", "-.9", "2e10", "-90E3", "3e+7", "+6e-1", "53.5e93", "-123.456e789"]

部分无效数字列举如下:["abc", "1a", "1e", "e3", "99e2.5", "--6", "-+3", "95a54e53"]

给你一个字符串 s ,如果 s 是一个 有效数字 ,请返回 true 。

示例 1:

输入:s = "0"
输出:true

示例 2:

输入:s = "e"
输出:false

示例 3:

输入:s = "."
输出:false

提示:

  • 1 <= s.length <= 20
  • s 仅含英文字母(大写和小写),数字(0-9),加号 '+' ,减号 '-' ,或者点 '.' 。

代码:

package main

import (
	"fmt"
	"strings"
)

func isNumber(s string) bool {
	s = strings.TrimSpace(s)
	if len(s) == 0 {
		return false
	}
	hasNum := false
	hasDot := false
	hasE := false
	for i, ch := range s {
		if ch >= '0' && ch <= '9' {
			hasNum = true
		} else if ch == '.' {
			if hasDot || hasE || i == len(s)-1 || (i == 0 && len(s) == 1) {
				return false
			}
			hasDot = true
		} else if ch == 'e' || ch == 'E' {
			if hasE || !hasNum || i == len(s)-1 || i == 0 {
				return false
			}
			hasE = true
			hasNum = false
		} else if ch == '+' || ch == '-' {
			if i != 0 && (s[i-1] != 'e' && s[i-1] != 'E') {
				return false
			}
		} else {
			return false
		}
	}
	return hasNum
}

func main() {
	fmt.Println(isNumber("0"))
	fmt.Println(isNumber(" 0.1 "))
	fmt.Println(isNumber("abc"))
	fmt.Println(isNumber("1 a"))
	fmt.Println(isNumber("2e10"))
	fmt.Println(isNumber(" -90e3   "))
	fmt.Println(isNumber(" 1e"))
	fmt.Println(isNumber("e3"))
	fmt.Println(isNumber(" 6e-1"))
	fmt.Println(isNumber(" 99e2.5 "))
	fmt.Println(isNumber("53.5e93"))
	fmt.Println(isNumber(" --6 "))
	fmt.Println(isNumber("-+3"))
	fmt.Println(isNumber("95a54e53"))
}

输出:

true
true
false
false
true
true
false
false
true
false
true
false
false
false

代码2:

用正则表达式判断

package main

import (
	"fmt"
	"regexp"
)

func isNumber(s string) bool {
	pattern := "^\\s*([+-]?((\\d+\\.?)|(\\.\\d+)|(\\d+\\.\\d+)))((e|E)[+-]?\\d+)?\\s*$"
	matched, _ := regexp.MatchString(pattern, s)
	return matched
}

func main() {
	fmt.Println(isNumber("0"))
	fmt.Println(isNumber(" 0.1 "))
	fmt.Println(isNumber("abc"))
	fmt.Println(isNumber("1 a"))
	fmt.Println(isNumber("2e10"))
	fmt.Println(isNumber(" -90e3   "))
	fmt.Println(isNumber(" 1e"))
	fmt.Println(isNumber("e3"))
	fmt.Println(isNumber(" 6e-1"))
	fmt.Println(isNumber(" 99e2.5 "))
	fmt.Println(isNumber("53.5e93"))
	fmt.Println(isNumber(" --6 "))
	fmt.Println(isNumber("-+3"))
	fmt.Println(isNumber("95a54e53"))
}

66. 加一 Plus One

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。

示例 2:

输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。

示例 3:

输入:digits = [0]
输出:[1]

提示:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9

代码:

package main

import (
	"fmt"
)

func plusOne(digits []int) []int {
	n := len(digits)
	for i := n - 1; i >= 0; i-- {
		if digits[i] < 9 {
			digits[i]++
			return digits
		}
		digits[i] = 0
	}
	return append([]int{1}, digits...)
}

func plusOne2(digits []int) []int {
	n := len(digits)
	for i := n - 1; i >= 0; i-- {
		if digits[i] < 9 {
			digits[i]++
			for j := i + 1; j < n; j++ {
				digits[j] = 0
			}
			return digits
		}
	}
	return append([]int{1}, make([]int, n)...)
}

func plusOne3(digits []int) []int {
	var carry int // 进位
	n := len(digits)
	digits[n-1]++
	for i := n - 1; i >= 0; i-- {
		digits[i] += carry
		carry = digits[i] / 10
		digits[i] %= 10
	}
	if carry > 0 {
		digits = append([]int{1}, digits...)
	}
	return digits
}

func main() {
	digits := []int{4, 3, 2, 1}
	fmt.Println(plusOne(digits))
	digits2 := []int{4, 3, 2, 1}
	fmt.Println(plusOne2(digits2))
	digits3 := []int{4, 3, 2, 1}
	fmt.Println(plusOne3(digits3))
}

输出:

[4 3 2 2]
[4 3 2 2]
[4 3 2 2]


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/ 文章来源地址https://www.toymoban.com/news/detail-420402.html

Golang每日一练(leetDay0022)

Golang每日一练 专栏

Golang每日一练(leetDay0022)

Python每日一练 专栏

Golang每日一练(leetDay0022)

C/C++每日一练 专栏

Golang每日一练(leetDay0022)

Java每日一练 专栏

到了这里,关于Golang每日一练(leetDay0022)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Golang每日一练(leetDay0116) 路径交叉、回文对

    Golang每日一练(leetDay0116) 路径交叉、回文对

    目录 335. 路径交叉 Self-crossing  🌟🌟🌟 336. 回文对 Palindrome Pairs  🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给你一个整数数组  distance   。 从  X-Y  平面上的点  (0,0)  开始,先向北

    2024年02月12日
    浏览(15)
  • Golang每日一练(leetDay0049) 二叉树专题(9)

    Golang每日一练(leetDay0049) 二叉树专题(9)

    目录 144. 二叉树的前序遍历 Binary-tree Preorder Traversal  🌟 145. 二叉树的前序遍历 Binary-tree Postorder Traversal  🌟 对比: 94. 二叉树的中序遍历 Binary-tree Inorder Traversal  🌟 146. LRU缓存 LRU Cache  🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一

    2024年02月04日
    浏览(14)
  • Golang每日一练(leetDay0098) 生命、Nim、猜数字游戏

    Golang每日一练(leetDay0098) 生命、Nim、猜数字游戏

    目录 289. 生命游戏 Game Of Life  🌟🌟 292. Nim 游戏 Nim Game  🌟 299. 猜数字游戏 Bulls and Cows  🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 生命游戏   是英国数学家约翰·何顿·康威在 1970 年发

    2024年02月09日
    浏览(16)
  • Golang每日一练(leetDay0102) 删除无效的括号、累加数

    Golang每日一练(leetDay0102) 删除无效的括号、累加数

    目录 295. 数据流的中位数 Find-median-from-data-stream 🌟🌟🌟 301. 删除无效的括号 Remove Invalid Parentheses 🌟🌟🌟 306. 累加数 Additive Number 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 中位数 是有

    2024年02月10日
    浏览(12)
  • Golang每日一练(leetDay0065) 位1的个数、词频统计

    Golang每日一练(leetDay0065) 位1的个数、词频统计

    目录 191. 位1的个数 Nnumber of 1-bits  🌟 192. 统计词频 Word Frequency  🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为

    2024年02月06日
    浏览(10)
  • Golang每日一练(leetDay0061) 表列序号、阶乘后的零

    Golang每日一练(leetDay0061) 表列序号、阶乘后的零

    目录 171. Excel 表列序号 Excel Sheet Column Number  🌟 172. 阶乘后的零 Factorial Trailing Zeroes  🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给你一个字符串  columnTitle  ,表示 Excel 表格中的列名称。返回  该列名称对

    2024年02月04日
    浏览(20)
  • Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列

    Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列

    目录 332. 重新安排行程 Reconstruct Itinerary  🌟🌟🌟 334. 递增的三元子序列 Increasing Triplet Subsequence 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给你一份航线列表  tickets  ,其中  tickets[i]

    2024年02月16日
    浏览(14)
  • Golang每日一练(leetDay0095) 第一个错误的版本、完全平方数

    Golang每日一练(leetDay0095) 第一个错误的版本、完全平方数

    目录 278. 第一个错误的版本 First Bad Version  🌟 279. 完全平方数 Perfect Squares  🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你

    2024年02月09日
    浏览(18)
  • Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分

    Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分

    目录 341. 扁平化嵌套列表迭代器 Flatten Nested List Iterator  🌟🌟 343. 整数拆分 Integer Break  🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给你一个嵌套的整数列表  nestedList  。每个元素要么是

    2024年02月16日
    浏览(38)
  • Golang每日一练(leetDay0075) 打家劫舍II、最短回文串

    Golang每日一练(leetDay0075) 打家劫舍II、最短回文串

    目录 213. 打家劫舍 II House Robber ii  🌟🌟 214. 最短回文串 Shortest Palindrome  🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的

    2024年02月06日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包