Leetcode 200.岛屿数量
200. 岛屿数量 - 力扣(Leetcode) 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051// 1 岛屿,0 海水, 见到岛屿则使用dfs 淹了这个所有1相连的岛屿,res++func numIslands(grid [][]byte) int { res := 0 r := len(grid) c := len(grid[0]) visited := make([][]byte, r) for i := 0; i < r; i++ { visited[i] = make([]byte, c) } // 遍历二维slice for i := 0; i < r; i++ { for j := 0; j < c; j++ { // 每个位置 if grid[i][j] == '1' { ...
结构体指针作为map key 结构体值改变对map有影响吗
最近偶然用到了结构体指针作为map key 的场景。当时有点不太确定:go 语言使用map 时使用指针p作为key, 那修改指针p的值之后。这map 还包含p 吗?接下来让我们一起看看: 当将指针作为 Map 的 Key 时,实际上是把指针的值作为键来进行插入和查找操作。因此,如果修改了该指针所指向的变量的值,那么并不会影响已经添加到 Map 中的键。因为这个指针仍然具有相同的值,所以它可以被用作一个标识符来检索和操作存储在Map中的数据 例如,以下代码定义了一个map[*int]string类型的映射,将指针p用作key来插入和索引数据: 123456789101112131415161718package mainimport "fmt"func main() { m := make(map[*int]string) x := 1 p := &x m[p] = "A" // 添加数据 fmt.Println(m) // map[0xc000016088:A] *p = 2 //...
Go语言删除指定索引元素
在Go语言中,可以使用切片的操作和 append 函数来删除特定索引的元素。 以下是一个示例代码,它演示了如何删除切片中索引值为 i 的元素: 12345678910111213package mainimport "fmt"func main() { a := []int{1, 2, 3, 4, 5} i := 2 // 要删除的索引 // 将要删除的元素从原始切片中删除,并返回剩下的元素组成的新切片 b := append(a[:i], a[i+1:]...) fmt.Println(b) // 输出 [1 2 4 5]} 在上面的代码中,我们定义了一个整数切片 a,包含 1、2、3、4、5 五个元素。然后我们定义要删除的元素的索引位置 i 为 2(即第三个元素)。 接下来,我们使用 append 函数和切片切割(slice expression)操作,在 a[:i] 和 a[i+1:] 中间加入空白符号 (…),以便将包含 a[i] 元素的子切片略过。也就是说,这个表达式等价于前...
Go语言指定索引插入元素
在Go语言中,可以使用切片(slice)的 append 函数和切片的切割(slice expression)操作来在指定索引位置插入元素。 下面是一个示例代码,它插入一个元素到切片的第二个位置: 12345678910package mainimport "fmt"func main() { a := []int{1, 2, 3, 4} i := 1 // 要插入的位置 b := append(a[:i], append([]int{5}, a[i:]...)...) // 在切片的第二个位置插入数字5 fmt.Println(b) // 输出 [1 5 2 3 4]} 在上面的代码中,我们首先定义了切片 a,包含整数 1、2、3、4。然后我们定义要插入的位置 i 为第二个元素(也就是索引值为 1)。 接着,在 append 函数中,我们将原始切片 a 切割成两部分:从起始位置到插入位置的子切片 a[:i],和从插入位置到末尾的子切片...
leetcode 108.将有序数组转换为二叉搜索树
108. 将有序数组转换为二叉搜索树 - 力扣(Leetcode) 递归解法注意递归函数的返回值和输入值,确定终止条件,确定单层递归逻辑注意递归函数定义,严格按照定义调用递归使用前序遍历 中左右 123456789101112131415161718192021222324/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */func sortedArrayToBST(nums []int) *TreeNode { return traversal(nums,0,len(nums)-1)}// 定义:返回nums root 节点func traversal(nums []int,left int , right int) *TreeNode{ if left > right { ...
Go语言-接口
在 Go 语言中,接口(interface)是一种类型,它定义了对象的行为规范,即定义了一组方法签名,而不需要指定具体的实现。接口使得不同的类型可以通过实现相同的方法集合来进行互换使用。 以一个简单的例子来说明接口的作用,在下面这段代码中,接口Printer定义了一个打印的方法Print(): 123456789101112131415161718192021222324type Printer interface { Print()}type User struct { name string}func (u User) Print() { fmt.Println(u.name,"我爱加班")} func printAll(ps []Printer) { for _, p := range ps { p.Print() }}func main() { var ps []Printer ps =...
Go语言-多态
Go语言中没有类,我们可以使用结构体作为对象,来绑定对应的方法。而接口是功能的抽象,是方法的集合。 我们来实现这样一个例子: 实现猫和狗两个对象,并且他们都有动作:叫,但叫声不同。再实现一个对象鸟,他除了叫,还会飞。 下面是基于Go语言,实现题目要求的代码: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647package mainimport "fmt"type Animal interface { Cry()}type Cat struct{}func (c Cat) Cry() { fmt.Println("喵喵喵")}type Dog struct{}func (d Dog) Cry() { fmt.Println("汪汪汪")}type Bird...
波纹
波光粼粼
Leetcode 513.找树左下角的值
513. 找树左下角的值 - 力扣(Leetcode) 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root = [2,1,3]输出: 1 示例 2: 输入: [1,2,3,4,null,5,6,null,null,7]输出: 7 提示: 二叉树的节点个数的范围是 [1,104] -2^31 <= Node.val <= 2^31 - 1 思考本题可以转化为什么呢? 1.最后一层的最左边的数值,递归的话需要记录最后一层,并且记录最左边的值2.如果是迭代呢?这个就更适合了,只要记录每层迭代中的第一个值,并且不断更新更大的值就好。 代码实现1.递归 12345678910111213141516171819202122var depth int // 全局变量 最大深度var res int // 记录最终结果func findBottomLeftValue(root *TreeNode) int { depth, res = 0,...