目录
199. 二叉树的右视图 Binarytree Right Side View 🌟🌟
200. 岛屿数量 Number-of-islands 🌟🌟
🌟 每日一练刷题专栏 🌟
Golang每日一练 专栏
Python每日一练 专栏
C/C++每日一练 专栏
Java每日一练 专栏
199. 二叉树的右视图 Binarytree Right Side View
root
示例 1:
输入: [1,2,3,null,5,null,4] 输出: [1,3,4]
示例 2:
输入: [1,null,3] 输出: [1,3]
示例 3:
输入: [] 输出: []
提示:
[0,100]-100 <= Node.val <= 100
代码:
package mainimport "fmt"const null = -1 << 31type TreeNode struct {Val intLeft *TreeNodeRight *TreeNode
}func (root *TreeNode) RightSideView() []int {var res []intif root == nil {return res}queue := []*TreeNode{root}for len(queue) > 0 {n := len(queue)for i := 0; i < n; i++ {node := queue[i]if i == n-1 {res = append(res, node.Val)}if node.Left != nil {queue = append(queue, node.Left)}if node.Right != nil {queue = append(queue, node.Right)}}queue = queue[n:]}return res
}func buildTree(nums []int) *TreeNode {if len(nums) == 0 {return nil}root := &TreeNode{Val: nums[0]}Queue := []*TreeNode{root}idx := 1for idx < len(nums) {node := Queue[0]Queue = Queue[1:]if nums[idx] != null {node.Left = &TreeNode{Val: nums[idx]}Queue = append(Queue, node.Left)}idx++if idx < len(nums) && nums[idx] != null {node.Right = &TreeNode{Val: nums[idx]}Queue = append(Queue, node.Right)}idx++}return root
}func ArrayToString(arr []int) string {res := "["for i := 0; i < len(arr); i++ {res += fmt.Sprint(arr[i])if i != len(arr)-1 {res += ","}}return res + "]"
}func main() {nums := []int{1, 2, 3, null, 5, null, 4}root := buildTree(nums)fmt.Println(ArrayToString(root.RightSideView()))nums = []int{1, null, 3}root = buildTree(nums)fmt.Println(ArrayToString(root.RightSideView()))
}
输出:
[1,3,4]
[1,3]
200. 岛屿数量 Number-of-islands
'1''0'
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
示例 1:
输入:grid = [["1","1","1","1","0"],["1","1","0","1","0"],["1","1","0","0","0"],["0","0","0","0","0"]] 输出:1
示例 2:
输入:grid = [["1","1","0","0","0"],["1","1","0","0","0"],["0","0","1","0","0"],["0","0","0","1","1"]] 输出:3
提示:
m == grid.lengthn == grid[i].length1 <= m, n <= 300grid[i][j]'0''1'
代码:
package mainimport "fmt"func numIslands(grid [][]byte) int {// 迭代整个网格,遇到陆地时就进行 DFS 搜索,找到一个区域后计数器加一m, n := len(grid), len(grid[0])var count intfor i := 0; i < m; i++ {for j := 0; j < n; j++ {if grid[i][j] == '1' {count++dfs(grid, i, j, m, n)}}}return count
}// DFS 搜索函数,将所有和当前岛屿相邻的陆地都标记为已遍历
func dfs(grid [][]byte, i, j, m, n int) {// 避免越界if i < 0 || j < 0 || i >= m || j >= n || grid[i][j] == '0' {return}// 标记当前位置为已遍历grid[i][j] = '0'// DFS 搜索四周的陆地dfs(grid, i+1, j, m, n)dfs(grid, i-1, j, m, n)dfs(grid, i, j+1, m, n)dfs(grid, i, j-1, m, n)
}func main() {grid1 := [][]byte{{'1', '1', '1', '1', '0'},{'1', '1', '0', '1', '0'},{'1', '1', '0', '0', '0'},{'0', '0', '0', '0', '0'},}fmt.Println(numIslands(grid1))grid2 := [][]byte{{'1', '1', '0', '0', '0'},{'1', '1', '0', '0', '0'},{'0', '0', '1', '0', '0'},{'0', '0', '0', '1', '1'},}fmt.Println(numIslands(grid2))
}
输出:
1
3
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
☸ 主页:https://hannyang.blog.csdn.net/