58.最后一个单词的长度-简单
题目描述:
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
题解:
遍历字符串寻找最后一个单词并记录长度就好了,可以用temp记录单词长度并传递给re,遇到空格将temp清零,避免了将re错误清零。看官方题解直接反向遍历就行了,搞复杂了
代码(Go):
func lengthOfLastWord(s string) int {
re := 0
temp := 0
for _,v := range s{
if v != ' '{
temp++
re = temp
}else{
temp = 0
}
}
return re
}
463. 岛屿的周长-简单
题目描述:
给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] = 1 表示陆地, grid[i][j] = 0 表示水域。
网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。
岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。
题解:
实际上只需要看一块陆地的相邻格子是否是水域就可以了,是水域就是边,当然也可以反过来想,一块陆地最多有4个边,每有一个相邻格子是陆地就减去一条边
代码(Go):
func islandPerimeter(grid [][]int) int {
length := 0
for i := 0;i < len(grid);i++{
for j := 0;j < len(grid[0]);j++{
if grid[i][j] == 1{
temp := 4
if i - 1 >= 0{
if grid[i - 1][j] == 1{
temp--
}
}
if j - 1 >= 0{
if grid[i][j - 1] == 1{
temp--
}
}
if i + 1 < len(grid){
if grid[i + 1][j] == 1{
temp--
}
}
if j + 1 < len(grid[0]){
if grid[i][j + 1] == 1{
temp--
}
}
length += temp
}
}
}
return length
}
226.翻转二叉树-简单
题目描述:
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
题解:
常规的递归题。但是发现一个很有意思的事,我递归终止条件多写了一层代码长了点但是时间击败100%,看答案其实终止条件写一层就可以了,我试一下发现时间耗费一下就上去了,最后只击败14%。
代码(Go):
func invertTree(root *TreeNode) *TreeNode {
if root == nil{
return root
}else if root.Left == nil && root.Right == nil{
return root
}
temp := root.Right
root.Right = root.Left
root.Left = temp
root.Left = invertTree(root.Left)
root.Right = invertTree(root.Right)
return root
}
200.岛屿数量-中等
题目描述:
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
题解:
之前岛屿周长的加强版,之前那道题只需要查看每个陆地周围是不是陆地,而现在不仅要查看每个陆地周围,如果周围是陆地的话还要继续递归的判断周围还有没有连接的陆地,并且要对这些陆地进行标记,每次递归判断都能标记一片岛屿,统计递归次数即可
代码(Go):
func numIslands(grid [][]byte) int {
num := 0
for i := 0;i < len(grid);i++{
for j := 0;j < len(grid[0]);j++{
if grid[i][j] == '1'{
num++
grid = flag(grid,i,j)
}
}
}
return num
}
func flag(grid [][]byte,i int,j int) [][]byte{
if i - 1 >= 0{
if grid[i - 1][j] == '1'{
grid[i - 1][j] = '2'
grid = flag(grid,i - 1,j)
}
}
if j - 1 >= 0{
if grid[i][j - 1] == '1'{
grid[i][j - 1] = '2'
grid = flag(grid,i,j - 1)
}
}
if i + 1 < len(grid){
if grid[i + 1][j] == '1'{
grid[i + 1][j] = '2'
grid = flag(grid,i + 1,j)
}
}
if j + 1 < len(grid[0]){
if grid[i][j + 1] == '1'{
grid[i][j + 1] = '2'
grid = flag(grid,i,j + 1)
}
}
return grid
}
总结
比较顺利的一天,再接再厉