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

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
}

总结

模拟所有情况是下下策,看题首先要从整体考虑有没有简单的思路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值