从零开始的力扣刷题记录-第六十七天

news/2024/10/23 7:33:05/

力扣每日四题

  • 202. 快乐数-简单
  • 20. 有效的括号-简单
  • 1706. 球会落何处-中等
  • 931. 下降路径最小和-中等
  • 总结

202. 快乐数-简单

题目描述:
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

题解:
这个是我刚开始刷力扣没做出来的题,现在看来其实很简单,快慢双指针或者哈希表都可以,当时代码还不熟练

代码(Go):

func isHappy(n int) bool {slow, fast := n, step(n)for fast != 1 && slow != fast {slow = step(slow)fast = step(step(fast))}return fast == 1
}func step(n int) int {sum := 0for n > 0 {sum += (n%10) * (n%10)n = n/10}return sum
}

20. 有效的括号-简单

题目描述:
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。

题解:
一样是一开始没做出来的题,因为当时map和切片都不熟练,虽然知道是用栈匹配但是不知道怎么实现

代码(Go):

func isValid(s string) bool {n := len(s)if n % 2 == 1 {return false}dict := map[byte]byte{')': '(',']': '[','}': '{',}stack := []byte{}for i := 0; i < n; i++ {if dict[s[i]] > 0 {if len(stack) == 0 || stack[len(stack)-1] != dict[s[i]] {return false}stack = stack[:len(stack)-1]}else{stack = append(stack, s[i])}}return len(stack) == 0
}

1706. 球会落何处-中等

题目描述:
用一个大小为 m x n 的二维网格 grid 表示一个箱子。你有 n 颗球。箱子的顶部和底部都是开着的。
箱子中的每个单元格都有一个对角线挡板,跨过单元格的两个角,可以将球导向左侧或者右侧。
将球导向右侧的挡板跨过左上角和右下角,在网格中用 1 表示。
将球导向左侧的挡板跨过右上角和左下角,在网格中用 -1 表示。
在箱子每一列的顶端各放一颗球。每颗球都可能卡在箱子里或从底部掉出来。如果球恰好卡在两块挡板之间的 “V” 形图案,或者被一块挡导向到箱子的任意一侧边上,就会卡住。
返回一个大小为 n 的数组 answer ,其中 answer[i] 是球放在顶部的第 i 列后从底部掉出来的那一列对应的下标,如果球卡在盒子里,则返回 -1 。

题解:
模拟,如果板子是1则右边板子必须也是1,如果板子是-1则左边板子也必须是-1,如果满足条件则下落,如果是1就向右下落否则向左下落。不知道这题为啥会放在动态规划专栏里,官方题解也没有用动态规划,一样是模拟

代码(Go):

func findBall(grid [][]int) []int {re := make([]int,len(grid[0]))for i := 0;i < len(grid[0]);i++{temp := 0j := ifor {if temp == len(grid){re[i] = jbreak}if j == 0 && grid[temp][j] == -1{re[i] = -1break}else if j == len(grid[0]) - 1 && grid[temp][j] == 1{re[i] = -1break}else if grid[temp][j] == 1 && grid[temp][j + 1] == -1{re[i] = -1break}else if grid[temp][j] == -1 && grid[temp][j - 1] == 1{re[i] = -1break}else if grid[temp][j] == 1 && grid[temp][j + 1] == 1{temp++j++}else{temp++j--}}}return re
}

931. 下降路径最小和-中等

题目描述:
给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过 matrix 的下降路径 的 最小和 。
下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列(即位于正下方或者沿对角线向左或者向右的第一个元素)。具体来说,位置 (row, col) 的下一个元素应当是 (row + 1, col - 1)、(row + 1, col) 或者 (row + 1, col + 1) 。

题解:
这个题和前不久做过的一个题很类似,每一个元素都从它上面的三个或两个元素中选择最小的加在自己身上得到到该元素的最小路径,最后只需要在矩阵的最后一行找到最小值即可

代码(Go):

func minFallingPathSum(matrix [][]int) int {for i := 1;i < len(matrix);i++{for j := 0;j < len(matrix[0]);j++{if j == 0{matrix[i][j] += min(matrix[i - 1][j],matrix[i - 1][j + 1])}else if j == len(matrix[0]) - 1{matrix[i][j] += min(matrix[i - 1][j],matrix[i - 1][j - 1])}else{matrix[i][j] += min(matrix[i - 1][j],min(matrix[i - 1][j - 1],matrix[i - 1][j + 1]))}}}re := matrix[len(matrix) - 1][0]for k := 0;k < len(matrix[0]);k++{if matrix[len(matrix) - 1][k] < re{re = matrix[len(matrix) - 1][k]}}return re
}func min(x int,y int) int {if x < y{return x}else{return y}
}

总结

动态规划好难啊啊啊,很多不会的题看别人题解都要看半天才能看懂


http://www.ppmy.cn/news/555550.html

相关文章

Vue-搭建Vuex开发环境

1 安装Vuex 安装之前需要了解一个版本问题&#xff0c;在vue2中&#xff0c;要用vuex的3版本&#xff0c;在vue3中&#xff0c;要用vuex的4版本&#xff0c;要严格遵循这个版本要求&#xff0c;不然就会出现各种意想不到的问题&#xff0c;例如下方安装报错&#xff0c;就算因…

kafka面试题(一)

1 kafka的ACK机制 Kafka 的 ACK&#xff08;Acknowledgement&#xff09;机制是指生产者在将消息发送到 Kafka 集群时&#xff0c;需要等待来自 Broker 的确认响应&#xff0c;以确保消息已经成功写入 Kafka。 Kafka 的 ACK 有三种模式&#xff1a; acks0&#xff1a;不需要等…

全球首款搭载鸿蒙操作系统的设备是什么,全球首款搭载华为鸿蒙系统的智能空调首发上市!美的创造...

全球首款采用华为鸿蒙系统的智能空调来了&#xff01;日前&#xff0c;美的空调正式对外宣布&#xff0c;首款搭载华为鸿蒙系统的智能空调中国尊鸿蒙艺术柜机&#xff0c;将于今年5月起上市销售&#xff0c;于今年空调旺季市场上掀起一轮全新的主动智能、新风无风感的智慧新体验…

美的:用创新助力国民品质提升

在国民对于舒适“家”需求日趋增加的窗口期&#xff0c;美的空调在电商策略及营销策略充分布局&#xff0c;推出中高端无风感系列产品&#xff0c;力求在空调使用场景中解决用户需求&#xff0c;满足用户对生活品质的提升的迫切期望。 针对用户对于空调的升级需求&#xff0c;美…

安卓平板修改和平精英90帧、120帧超广角,2k/4k分辨率(无需root!!!)

前言&#xff1a;今天我们将探讨如何在安卓平板上修改和平精英超广角以及高帧率画质效果。 1、首先&#xff0c;我们要知道平板改超广角的好处是什么&#xff1f;我们都知道平板相比于手机显示宽度是要更大的&#xff0c;如果平板再改个超广角效果&#xff0c;甚至连脚都可以看…

9招!解决空调总是报低压报警的问题

空调低压故障常见原因有&#xff1a; 1、空调制冷系统铜管管道过长。 2、空调室内机过滤网脏堵。 3、空调制冷系统中的干燥过滤器脏堵或者铜管管道油堵。 4、空调制冷系统中的低压保护器故障。 5、空调制冷系统中的电磁阀打不开。 6、空调制冷系统中的膨胀阀故障。 7、空调制冷…

【webpack】webpack探索

webpack是什么 构建工具 初始化 pnpm init -y生成一个package.json文件 为什么使用webpack 很难直观的去感受到你的某个文件依赖了哪些外部车或者其他组件如果一个依赖没有加上或者说顺序故错了&#xff0c;整个项目可能都步起来如果一个依赖已经装了但是没有用。试览器会…

Rust 原始类型之数组array内置方法

目录 数组 array 声明 访问 引用 Reference 切片 Slice 方法 题目实例 数组 array 在 Rust 中&#xff0c;数组是一种固定大小的数据结构&#xff0c;用于存储具有相同数据类型的元素的有序集合。 “固定大小”是指数组中的元素的类型和数量确定&#xff0c;也就确定了…