1742. 盒子中小球的最大数量-简单
题目描述:
你在一家生产小球的玩具厂工作,有 n 个小球,编号从 lowLimit 开始,到 highLimit 结束(包括 lowLimit 和 highLimit ,即 n == highLimit - lowLimit + 1)。另有无限数量的盒子,编号从 1 到 infinity 。
你的工作是将每个小球放入盒子中,其中盒子的编号应当等于小球编号上每位数字的和。例如,编号 321 的小球应当放入编号 3 + 2 + 1 = 6 的盒子,而编号 10 的小球应当放入编号 1 + 0 = 1 的盒子。
给你两个整数 lowLimit 和 highLimit ,返回放有最多小球的盒子中的小球数量。如果有多个盒子都满足放有最多小球,只需返回其中任一盒子的小球数量。
题解:
看着描述挺多,实际上还是哈希表那一套
代码(Go):
func countBalls(lowLimit int, highLimit int) int {
var dict = make(map[int]int)
flag := 0
temp := 0
for i := lowLimit;i <= highLimit;i++{
j := i
for j != 0{
flag = flag + j%10
j = j/10
}
if _,ok := dict[flag];ok{
dict[flag]++
flag = 0
}else{
dict[flag] = 1
flag = 0
}
}
for _,v := range dict{
if v > temp{
temp = v
}
}
return temp
}
2042. 检查句子中的数字是否递增-简单
题目描述:
句子是由若干 token 组成的一个列表,token 间用 单个 空格分隔,句子没有前导或尾随空格。每个 token 要么是一个由数字 0-9 组成的不含前导零的 正整数 ,要么是一个由小写英文字母组成的 单词 。
示例,“a puppy has 2 eyes 4 legs” 是一个由 7 个 token 组成的句子:“2” 和 “4” 是数字,其他像 “puppy” 这样的 tokens 属于单词。
给你一个表示句子的字符串 s ,你需要检查 s 中的 全部 数字是否从左到右严格递增(即,除了最后一个数字,s 中的 每个 数字都严格小于它 右侧 的数字)。
如果满足题目要求,返回 true ,否则,返回 false 。
题解:
没什么意思,主要考的是API的使用
代码(Go):
func areNumbersAscending(s string) bool {
pre, i := 0, 0
for i < len(s) {
if unicode.IsDigit(rune(s[i])) {
cur := 0
for i < len(s) && unicode.IsDigit(rune(s[i])) {
cur = cur*10 + int(s[i]-'0')
i++
}
if cur <= pre {
return false
}
pre = cur
} else {
i++
}
}
return true
}
617.合并二叉树-简单
题目描述:
给你两棵二叉树: root1 和 root2 。
想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。
返回合并后的二叉树。
注意: 合并过程必须从两个树的根节点开始。
题解:
深度搜索递归,常规题
代码(Go):
func mergeTrees(root1 *TreeNode, root2 *TreeNode) *TreeNode {
if root1 != nil && root2 != nil{
root1.Val += root2.Val
}
if root1 == nil && root2 != nil{
return root2
}
if root1 != nil && root2 == nil{
return root1
}
if root1 == nil && root2 == nil{
return nil
}
root1.Left = mergeTrees(root1.Left, root2.Left)
root1.Right = mergeTrees(root1.Right, root2.Right)
return root1
}
724. 寻找数组的中心下标-简单
题目描述:
给你一个整数数组 nums ,请计算数组的 中心下标 。
数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。
如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。
如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。
题解:
想复杂了,考虑一大堆情况敲了半小时代码始终只能过一部分用例,最后看答案居然是一个极其简单的思想,左右相等实际上就是左边等于数组所有元素和的一半
代码(Go):
func pivotIndex(nums []int) int {
total := 0
for _, v := range nums {
total += v
}
sum := 0
for i, v := range nums {
if 2*sum+v == total {
return i
}
sum += v
}
return -1
}
总结
模拟所有情况是下下策,看题首先要从整体考虑有没有简单的思路