【LeetCode】剑指 Offer <二刷>(7)

简介: 【LeetCode】剑指 Offer <二刷>(7)

题目:剑指 Offer 14- I. 剪绳子 - 力扣(LeetCode)

题目的接口:

func cuttingRope(n int) int {
}

解题思路:

这道题我想到两种方法,一个方法是用动态规划,一是利用数学规律来做,但是我数学不好,所以我就用动态规划的做法来做这道题:

动态规划的核心其实就是它的状态转移方程,这里我就把这道题的状态转移方程是如何取得的思路讲一讲:首先,因为如果减 1 格,对整体的乘积没有帮助,所以我们就从 2 开始( j )

然后,如果可以剪,有分两种情况,一种是剪,一种是不剪:1)如果剪,那么乘积和就是 j * ( i-j ) ,2)如果不剪,那么乘积和就是 j * dp[ i-j ],这样我们只需要求他们的最大值即可。

这样我们就得出了状态转移方程,可以写代码了:

代码:

func cuttingRope(n int) int {
    dp := make([]int, n+1)
    dp[2] = 1
    for i := 3; i < n + 1; i++ {
        for j := 2; j < i; j++ {
            dp[i] = max(dp[i], max(j * (i-j), j * dp[i-j]))
        }
    }
    return dp[n]
}
func max(x, y int) int {
    if x > y {
        return x
    }
    return y
}

过啦!!!

题目:剑指 Offer 14- II. 剪绳子 II - 力扣(LeetCode)

题目的接口:

func cuttingRope(n int) int {
}

解题思路:

这道题其实跟上面一道题一模一样,但是这道题就很操蛋了,他一定要用数学规律来做,因为它把数字放的很大,导致我们没办法用动态规划来求解,

所以我们只好用贪心来解,这个数学规律我推不出来,但是我会直接用结论,就是剪绳子越靠近 3 ,最后的值就会越大,所以我们只需要剪出足够多的 3 就行了,所以代码反而很好写。

代码:

func cuttingRope(n int) int {
    if n == 2 {return 1}
    if n == 3 {return 2}
    if n == 4 {return 4}
    ret := 1
    for n > 4 {
        n -= 3
        ret = ret * 3 % (1e9 + 7)
    }
    ret = ret * n % (1e9 + 7)
    return ret
}

过啦!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

相关文章
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
63 6
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
56 4
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 49. 丑数
解决剑指 Offer 49题"丑数"的Python实现,通过动态规划的方法计算出第n个丑数。
46 2
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 04. 二维数组中的查找
剑指Offer题目 "二维数组中的查找" 的Python解决方案,包括非递归迭代、递归以及使用内置函数的二分查找方法,以判断一个有序的二维数组中是否含有给定整数。
39 1
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 03. 数组中重复的数字
解决剑指Offer题目 "数组中重复的数字" 的Python实现方法,通过使用字典来记录数组中每个数字的出现次数,快速找出重复的数字。
41 1
|
4月前
|
iOS开发 MacOS
【Mac系统】解决Vscode中LeetCode插件不能刷剑指offer题库
文章讨论了解决Mac系统中Vscode里LeetCode插件无法刷剑指Offer题库的问题,并提供了一些相关的使用技巧和资源链接。
258 1
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
57 5
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
34 4
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
Leetcode题目"剑指 Offer 21. 调整数组顺序使奇数位于偶数前面"的两种Python解决方案,一种是使用双端队列调整数组顺序,另一种是使用双指针法将奇数移到数组前半部分,偶数移到后半部分。
29 4
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
46 4