
目录
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例 1:

输入: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.lengthn == grid[i].length1 <= m, n <= 2000 <= 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))
}
有效数字(按顺序)可以分成以下几个部分:
'e' 或 'E' ,后面跟着一个 整数小数(按顺序)可以分成以下几个部分:
'+' 或 '-')'.''.' ,后面再跟着至少一位数字'.' ,后面跟着至少一位数字整数(按顺序)可以分成以下几个部分:
'+' 或 '-')部分有效数字列举如下:["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 <= 20s 仅含英文字母(大写和小写),数字(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"))
}
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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 <= 1000 <= 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/
![]() | Golang每日一练 专栏 |
![]() | Python每日一练 专栏 |
![]() | C/C++每日一练 专栏 |
![]() | Java每日一练 专栏 |
?作者主页:静Yu?简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者?社区地址:前端知识交流社区?博主的个人博客:静Yu的个人博客?博主的个人笔记本:前端面试题个人笔记本只记录前端领域的面试题目,项目总结,面试技巧等等。接下来会更新蓝桥杯官方系统基础练习的VIP试题,依然包括解题思路,源代码等等。问题描述:给定当前的时间,请用英文的读法将它读出来。时间用时h和分m表示,在英文的读法中,读一个时间的方法是: 如果m为0,则将时读出来,然后加上“o’clock”,如3:00读作“threeo’clock”。 如果m不为0,则将时读出来,然后将分读出来,如5
题目描述小张买了 n 件白色的衣服,他觉得所有衣服都是一种颜色太单调,希望对这些衣服进行染色,每次染色时,他会将某种颜色的所有衣服寄去染色厂,第 i 件衣服的邮费为 ai 元,染色厂会按照小张的要求将其中一部分衣服染成同一种任意的颜色,之后将衣服寄给小张,请问小张要将 n 件衣服染成不同颜色的最小代价是多少?输入描述第一行为一个整数 n ,表示衣服的数量。第二行包括 n 个整数a1,a2...an 表示第 i 件衣服的邮费为 ai 元。(1≤n≤10^5,1≤ai≤10^9 )输出描述输出一个整数表示小张所要花费的最小代价。输入输出样例输入551321输出25 思考🤔:题意:意思是
注意事项:本题为"线性dp—最长上升子序列的长度"的扩展题,所以dp思路这里就不再赘述。题目:比如,对于序列(1,7,3,5,9,4,8),有它的一些上升子序列,如(1,7),(3,4,8)等。这些子序列中和最大为18,为子序列(1,3,5,9)的和。你的任务,就是对于给定的序列,求出最大上升子序列和。注意,最长的上升子序列的和不一定是最大的,比如序列(100,1,2,3)的最大上升子序列和为100,而最长上升子序列为(1,2,3)。输入格式输入的第一行是序列的长度N。第二行给出序列中的N个整数,这些整数的取值范围都在0到10000(可能重复)。输出格式输出一个整数,表示最大上升子序列和。数据
目录类01背包问题,选or不选变种走方格类01背包问题,选or不选不同的子序列_牛客题霸_牛客网问题翻译: S有多少个不同的子串与T相同 S[1:m]中的子串与T[1:n]相同的个数 由S的前m个字符组成的子串与T的前n个字符相同的个数状态: 子状态:由S的前1,2,...,m个字符组成的子串与T的前1,2,...,n个字符相同的个数 F(i,j):S[1:i]中的子串与T[1:j]相同的个数状态递推: 在F(i,j)处需要考虑S[i]=T[j]和S[i]!=T[j]两种情况 当S[i]=T[j]
专栏: 蓝桥杯——每日四道编程题(两道真题+两道模拟)“蓝桥杯就要开始了,这些题刷到就是赚到”₍ᐢ..ᐢ₎♡另一个专栏: 蓝桥杯——每日四道填空题(两道真题+两道模拟题)专题前瞻:复习并查集、Tire字符串、双指针、二分目录第一道真题(日志统计)输出描述输入输出样例第二道真题(合根植物)输出描述输入输出样例第三道模拟题(acwing):Trie字符串统计第四道真题(扫地机器人)题目描述第一道真题(日志统计) 输出描述按从小到大的顺序输出热帖 id。每个 id 一行。输入输出样例输入:71020101010101019110031003输出;13运行限制最大运行时间:1s最大运行内存:256M双
专栏:蓝桥杯——每日四道填空题(两道真题+两道模拟题)&离蓝桥杯已经不到一个月时间了,赶快刷起来吧,填空题一定别丢分!!୧꒰•̀ᴗ•́꒱୨另一个专栏是:蓝桥杯——编程题刷题营(每日四题,两道模拟,两道真题)目录第一道真题(2016年省赛):寒假作业 |答案:64第二道真题(2019年省赛):质数 |答案:17569第三道模拟题(2022年第二次模拟赛): 拆分质数个数|答案:33第四道模拟题():答案:10第一道真题(2016年省赛):寒假作业 |答案:64题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。现在小学的数学题目也不是那么好玩的。看看这个寒假作业:
🌕写在前面Hello🤗大家好啊,我是kikokingzz,名字太长不好记,大家可以叫我kiko哦~从今天开始,我将正式开启一个新的打卡专题——《C语言百炼成神计划》,没错!百炼成神,目的是通过百天刷题计划,通过题目和知识点串联的方式,完成C语言的复习和巩固;后期还会配有专门的笔记总结和文档教程哦!想要搞定,搞透C语言的同学🎉🎉欢迎持续关注🎉🎉🍊博客主页:kikoking的江湖背景🍊🌟🌟往期必看🌟🌟🔥【C语言百炼成神】第一日·操作符🔥🔥【C语言百炼成神】第二日·操作符🔥🔥【C语言百炼成神】第三日·操作符🔥ps:文章若有任何疑问欢迎光速评论私信我!!有时kiko可能会打错,脑子瓦特了😵💫目录🌕写
和鲸社区算是国内比较不错的机器学习算力平台,可以通过每日登录积累成长值,每月还会给鲸币奖励,有一段时间每天都会登登陆一次,但是有时候还是会忘记。最近根据腾讯云Serverless部署云函数实现自动登录,解放双手。首先每次登陆后将进行微信推送,我采用的是pushplus平台,获取token即可。微信推送#从pushplus平台获取tokentoken='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'defsendToWechat(title,content):url='http://www.pushplus.plus/send'headers={'Content-Type
华为Od必看系列华为OD机试全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理已参加机试人员的实战技巧华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典文章目录华为Od必看系列使用说明本期题目:任务总执行时长题目输入输出示例一输入输出说明go代码实现华为OD其它语言版本
目录Golang获取HTTP请求的IP地址HTTP的发展历史3,HTTP所在的网络层次4,HTTP请求与响应