剑指Offer
剑之所向,心之所往。
samarua
while "live" : print("Loli")
展开
-
【剑指offer】LRU缓存
????题目设计和实现一个 LRU(最近最少使用)缓存机制。LRUCache至少需要实现:1)LRUCache(int capacity):以正整数作为容量(capacity)初始化LRU缓存2)int get(int key):如果key存在于缓存中,则返回对应的val;否则返回-13)void put(int key, int value):如果key已存在,则更新它对应的值;如果key不存在,则插入该键值对。注意,如果超过缓存容量,则需要清理掉最近最少使用的那个键值对。 ☘️原创 2021-08-18 10:09:30 · 238 阅读 · 0 评论 -
【剑指offer】把字符串转换成整数
????题目写一个函数 StrToInt,实现把字符串转换成整数这个功能。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。说明1:假如该字符串中的第一个非空格字符不是一个有效整数字符原创 2021-08-09 20:20:46 · 101 阅读 · 0 评论 -
【剑指offer】圆圈中最后剩下的数字+构建乘积数组
????题目0,1,···,n-1 这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。输入:n = 10, m = 3输出:3☘️解析这个经典的问题叫做【约瑟夫环】。弗拉维奥·约瑟夫是1世纪的一名犹太历史学家。他在自己的日记中写道,他和他的40个战友被罗马军队包围在洞中。他们讨论是自杀还是被俘,最终决定自杀,并以抽签的方式决定谁杀掉谁。约瑟夫斯和另外一个人是最后两个留下的人。约瑟夫斯说服了那个人,他们将向罗马军队原创 2021-08-09 20:09:48 · 105 阅读 · 0 评论 -
【剑指offer】扑克牌中的顺子+不用加减乘除做加法
????题目从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。规则:2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。输入:[2, 3, 4, 5, 6]输出:true输入:[0, 0, 1, 2, 5]输出:true☘️解析理清题意后,我们分析出5张牌是顺子的充要条件为:1)除大小王外,不能有重复2)除大小王外,最大值max和最小值min满足:max - min < 5第二个条件是解题的神来之笔:没有大小王时,假原创 2021-08-09 19:29:05 · 124 阅读 · 0 评论 -
【剑指offer】翻转单词顺序输出句子
????题目输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。注意:句子两侧可能会有多余的空格;两个单词之间可能不止一个空格。输入:“the sky is blue”输出:“blue is sky the” ☘️解析解法一:利用正则API切割这是一个非常朴素的思路:将句子切割为一个个单词,然后逆序拼接即可。但是这会遇到一个问题,两个单词之间可能不止一个空格,那么分割的依据是什么?如果能想到那就很简单:将 s.split(" ") 替换为正则 s.split(" +原创 2021-08-09 19:04:50 · 110 阅读 · 0 评论 -
【剑指offer】数组中出现1次的数字+数组中出现2次的数字
????题目一个数组nums里除两个数字之外,其他数字都出现了两次。找出这两个数字。输入:nums = [1, 2, 10, 4, 1, 4, 3, 3]输出:[2,10] 或 [10,2]☘️解析此时,我们有些蒙了。因为数组中存在两个只出现一次的数字,所以直接求异或和,一定会得到一个没有意义的结果。是不是求异或和的思路不能用了呢?如果可以将原数组拆分为两个子数组,让这两个出现一次的数字分别分到两个数组中,那么是不是就能在两个子数组中分别求异或和、分别得到num1和num2了呢?问题又来了,原创 2021-08-09 18:46:01 · 170 阅读 · 0 评论 -
【剑指offer】最长不含重复字符的子字符串+和为s的连续正数序列
????题目请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。输入:“pwwkew”输出:3☘️解析滑动指针的核心为:以右指针为驱动,拖着左指针向前走——右指针主动移动,探索新的区域;左指针被迫跟进,负责保证区间符合题意。对于本题,可以使用哈希集合(HashSet)或哈希表(HashMap)来统计滑动窗口内的信息。戳这里:《【图解算法】模板的优化与进阶——滑动窗口专题》????代码使用哈希集合:class Solution { public int l原创 2021-08-09 15:33:58 · 78 阅读 · 0 评论 -
【剑指offer】数组中的逆序对
????题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。输入:[7, 3, 2, 6, 0, 1, 5, 4]输出:17 ☘️解析告诉你一个秘密:【逆序对】与【归并排序】息息相关。怎么会有联系呢?不妨重新思考一下归并排序的核心思路:将数组左侧部分和右侧部分分别递归排序,然后进行二路归并。此时的数组有一个重要的中间状态:左侧和右侧分别是一个递增数组。这正是关键!看下面的例子,你会立即理解:[ 2原创 2021-08-09 15:16:40 · 93 阅读 · 0 评论 -
【剑指offer】股票的最大利润
????题目假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?输入:[7, 1, 5, 3, 6, 4]输出:5解释:第2天买,第5天卖,获得最大利润 6 - 1 = 5☘️解析一共两个状态【不持股】【持股】dp[i][0]的含义是 第i天不持股的最大资金dp[i][1]的含义是 第i天持股的最大资金戳这里:《【图解算法】经典而规整的动态规划——买卖股票的最佳时机》????代码class Solution { public int ma原创 2021-08-08 23:29:15 · 97 阅读 · 0 评论 -
【剑指offer】丑数
????题目我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。输入:20输出:36解释:前20个丑数为 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 27, 30, 32, 36。 ☘️解析解法1:最小堆使用一个最小堆(优先队列),先加入一个1进行初始化。每次取堆顶元素x(x是当前堆中最小的丑数),然后把丑数 2x、3x、5x 加入堆中。那么,当你第n次原创 2021-08-08 16:11:10 · 84 阅读 · 0 评论 -
【剑指offer】1~n 整数中 1 出现的次数
????题目输入一个整数n,求1~n这n个整数的十进制表示中1出现的次数。输入:12输出:5解释:1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。 ☘️解析这是一道比较困难的数学题。下面将用几个具体的例子,带大家弄明白代码思路。我们不按照数字递增(1,2,3,4,5,…,1024,1025,…)的角度去考虑问题,而是从数位(个位、十位、百位、千位…)的角度去考虑问题。我们将某一位的数字固定为1,然后去计算其他位所有可以取到的情况——想象一下,这里有一个密原创 2021-08-08 15:55:44 · 121 阅读 · 0 评论 -
【剑指offer】数字序列中某一位的数字
????题目数字序列为:01234567891011121314151617181920212223242526272829…输入:13输出:1输入:200输出:0 ☘️解析比较有难度的数学问题。请耐心看完下面的讲解 >_< !首先,弄明白题意后,不难画出下面的表格:数字范围几个数字几位数共占多少位1~991910~99902180100~999900327001000~99999000436000原创 2021-08-08 15:55:26 · 71 阅读 · 0 评论 -
【剑指offer】最小的k个数
????题目输入整数数组 arr ,找出其中最小的 k 个数。 ☘️解析解法1——朴素排序首先可以想到一种非常朴素的思路:将数据从小到大进行排序,取其前k个数即可。分析:时间复杂度 O(nlogn) ,即排序的开销。不难想到一个问题,我们只需要得到最小的k个数,却没要求这k个数、以及其他n-k个数内部也要有序啊——这种思路似乎进行了多余的排序操作。解法2——小顶堆接着,我们想到了一个关键的数据结构——堆(heap)。我们把所有数据放到小顶堆中,然后弹出k个数不就行了吗?分析原创 2021-08-08 14:30:27 · 81 阅读 · 0 评论 -
【剑指offer】把数字翻译成字符串+礼物的最大价值+n个骰子的点数总和
????题目给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请计算给出的数字有多少种不同的翻译方法。输入:12258输出:5解释:12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi”☘️解析比较简单的动态规划。一个易错点在于,"02"这样的组合并不能像"2"一样的被翻译,需要特判一下。????代码class Sol原创 2021-08-08 14:09:36 · 89 阅读 · 0 评论 -
【剑指offer】数据流中的中位数
????题目如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。输入:["MedianFinder", "addNum", "addNum", "findMedian", "addNum", "findMedian"] [[], [1], [2], [], [3], []]输出:[null, null, null, 1.50000, null, 2.0000原创 2021-08-08 14:08:06 · 65 阅读 · 0 评论 -
【剑指offer】顺时针打印矩阵
????题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。输入:matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]输出:[1, 2, 3, 6, 9, 8, 7, 4, 5] ☘️解析这道题目的核心难点有两个:1)如何顺时针打印?2)何时终止打印?1)如何顺时针打印?收缩法。设置四个指针分别指向四个边界:top、bottom、left、right;每次打印完一行/一列后,收缩其中一个指针即可。2)何时终止打印?终止打印的情原创 2021-08-07 18:24:47 · 71 阅读 · 0 评论 -
【剑指offer】 数组中出现次数超过一半的数字
????题目数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。注:你可以假设数组是非空的,并且给定的数组总是存在多数元素。输入:[1, 2, 3, 2, 2, 2, 5, 4, 2]输出:2 ☘️解析解法一:朴素计数使用哈希表进行计数,当某个数字出现超过一半时,立即返回该数字。解法二:排序取中间值这是非常巧妙的思路——既然某个数字超过一半,那么排序后它必然出现在中间解法三:摩尔投票法摩尔投票法的核心在于:非我族类,其心必异。对于当前的king(王),与其相同原创 2021-08-07 15:54:57 · 108 阅读 · 0 评论 -
【剑指offer】调整数组顺序使得前面奇数后面偶数
????题目输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。输入:[1, 2, 3, 4, 8, 9]输出:[1, 3, 9, 2, 4, 8]补充:[1, 9, 3, 2, 8, 4] … ☘️解析我们不希望使用额外空间(那样当然更加简单),所以要考虑原地算法。再审视一遍题目要求:把所有奇数移到前面,把所有偶数移到后面,但奇数部分和偶数部分内部不考虑顺序…这是不是和单次快速排序的思想极为相似:把所有小于基准的数原创 2021-08-07 15:16:28 · 92 阅读 · 0 评论 -
【剑指offer】数组中重复若干次的数字
????题目找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 ☘️解析我们首先想到几种简单的思路:1)先排序,然后一次扫描即可,核心在于排序会使重复的数字凑到一起——但时间复杂度O(nlogn)。2)直接使用哈希集合,如果当前数字已经存在于哈希集合中,则说明其原创 2021-08-07 14:59:53 · 90 阅读 · 0 评论 -
【剑指offer】队列的最大值+滑动窗口的最大值
????题目你能否定义一个队列,这个队列不仅拥有 push_back 和 pop_front 这两个队列原生函数,还能够通过 max_value 函数 O(1) 的获取队列中的最大值。☘️解析单调队列模板题。使用两个队列组合实现这个单调队列:1)原始队列Queue——这个队列是普通队列,用于存放原始数据2)辅助队列Deque——这个队列是双边队列,队首(左侧)即为当前队列最大值,并进行同步动作;队尾(右侧)维护一个单调结构看一个具体的例子吧(25314):原始队列Queue双边队列D原创 2021-08-06 17:03:33 · 81 阅读 · 0 评论 -
【剑指offer】用两个栈实现队列+用两个栈实现包含min函数的栈
????题目用两个栈实现一个队列。请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。注:若队列中没有元素,deleteHead 操作返回 -1 。☘️解析两个栈:stack1只负责入,stack2只负责出核心逻辑: 当stack2为空时就将stack1的所有元素倾倒入stack2中????代码class CQueue { /** * stack1只负责入 * stack2只负责出原创 2021-08-06 15:27:50 · 144 阅读 · 0 评论 -
【剑指offer】二叉搜索树的最近公共祖先+二叉树的最近公共祖先
????题目给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。注意:一个节点也可以是认为它自己的祖先。☘️解析对于当前根节点,p、q节点的位置有以下情况:1)如果【p、q的值都小于根结点】,则p、q都位于左子树2)如果【p、q的值都大于根结点】,则p、q都位于右子树3)如果【p、q分别位于root两侧】或者【p、q中有节点与root重合】,则root即为结果????代码class Solution { public TreeNode lowestCommonAncesto原创 2021-08-06 11:51:49 · 92 阅读 · 0 评论 -
【剑指offer】判定平衡二叉树
????题目输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 ☘️解析思路一:双递归+子结构递归maxDepth用于递归计算节点深度,isBalanced通过子结构递归遍历到所有节点。这种思路朴素且常见。思路二:双层含义的递归dfs递归的返回值有两层含义——如果是-1,则含义为以该节点为根节点的子树不是平衡树;如果是其他数字,则含义为以该节点为根节点的子树的高度。这种思路比较巧妙,注意结合代码体会。原创 2021-08-06 11:51:31 · 87 阅读 · 0 评论 -
【剑指offer】二叉搜索树的第k大节点+二叉搜索树与双向链表
????题目给定一棵二叉搜索树,请找出其中第k大的节点。☘️解析二叉搜索树【左子树-root-右子树】是递增序列二叉搜索树【右子树-root-左子树】是递减序列本题是找第k大的节点而不是第k小的节点,因此采用第二种中序遍历顺序。????代码class Solution { public int kthLargest(TreeNode root, int k) { dfs(root, k); return res; } private i原创 2021-08-06 11:51:02 · 61 阅读 · 0 评论 -
【剑指offer】序列化二叉树
????题目请实现两个函数,分别用来 序列化 和 反序列化 二叉树。你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串(serialize)并且将这个字符串反序列化为原始的树结构(deserialize)。 ☘️解析我们通常如何记录二叉树的信息?前序、中序、后序、层次遍历得到的序列。但是,给你其中一个序列,你可以还原出一整棵二叉树吗?不能。前序、中序、后序、层次序列携带的信息都是不完整的,不足原创 2021-08-06 11:48:48 · 77 阅读 · 0 评论 -
【剑指offer】对称的二叉树+二叉树的镜像
????题目请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 1 / \ 2 2 / \ / \3 4 4 3☘️解析很常规的递归。但是终止条件中对于null的处理,要注意一下:1)如果node1和node2都为null,则匹配成功2)如果node1和node2中有一个为null,则匹配失败另外,下面的代码中,递归的入口也非常巧妙:dfs(root, root)。????代码class Solution {原创 2021-08-06 11:48:25 · 67 阅读 · 0 评论 -
【剑指offer】树的子结构
????题目输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)给定的树 A: 3 / \ 4 5 / \ 1 2 给定的树 B: 4 / 1树B是树A的子结构 >_<! ☘️解析算法包含两个步骤:1)对于树A的每个节点(一次子结构递归)2)以该节点为根结点,匹配树B(一次普通递归)isSubStructure(A, B)终止条件:根据题意,A==null或B==nul原创 2021-08-06 11:47:52 · 67 阅读 · 0 评论 -
【剑指offer】从上到下打印二叉树I+从上到下打印二叉树II+从上到下打印二叉树III
????题目从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。给定二叉树: 3 / \ 9 20 / \ 15 7 返回:[3,9,20,15,7]☘️解析层序遍历(简单模板)。????代码class Solution { public int[] levelOrder(TreeNode root) { if (root == null) { return new int[0]原创 2021-08-06 11:47:31 · 78 阅读 · 0 评论 -
【剑指offer】从尾到头打印链表+链表中倒数第k个节点
????题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。输入:1 → 3 → 2 → 4输出: [4, 2, 3, 1]☘️解析立即想到3种思路1)递归打印2)借助辅助栈迭代打印3)扫描两次,第一次扫描得到链表长度。第一次扫描将元素落位到数组????代码class Solution1 { public int[] reversePrint(ListNode head) { // 递归打印 printList(head);原创 2021-08-05 10:10:35 · 112 阅读 · 0 评论 -
【剑指offer】复制带随机指针的链表
????题目在复杂链表中,每个节点除了有一个 next 指针指向下一个节点或者 null,还有一个 random 指针指向链表中的任意节点或者 null。请你实现一个函数对其进行复制。 ☘️解析解法一:哈希表复制该链表最大的问题就在于,在复制random指针时,我们不确定random指向的节点是否存在。那么思路也就呼之欲出——如果random指向的节点存在,那么就让random直接指向它;如果random指向的节点不存在,那么就先new出一个复制节点,然后让random指向它。如何原创 2021-08-05 10:09:59 · 67 阅读 · 0 评论 -
【剑指offer】反转链表
????题目定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。输入:1 → 2 → 3 → 4 → 5输出:5 → 4 → 3 → 2 → 1 ☘️解析我们有两种简单的思路:1)迭代——经典的双/三指针2)递归——假设子问题已经解决还有一种略微复杂的思路:3)头插法——不断将节点提到前面 ????代码1)迭代——经典的双/三指针class Solution { public ListNode reverseList(ListNod原创 2021-08-05 10:08:41 · 103 阅读 · 0 评论 -
【剑指offer】链表排序
????题目给你链表的头结点head ,请将其按升序排列并返回排序后的链表。输入:4 → 3 → 1 → 7 → 8 → 9 → 2 → 11 → 5 → 6输出:1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9 → 11 ☘️解析极其经典的链表归并排序,算法核心有三部分:1)快慢指针断链(cut)2)链表的二路归并(merge)3)递归(sortList)细节说明:1)使用快慢指针法时,最终slow指针指向的“中点”是偏右的。举个例子:(1, 2, 3)原创 2021-08-05 10:07:49 · 234 阅读 · 0 评论 -
【剑指offer】链表中环的入口
????题目给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回null。3 → 1 → 2 → 4 → 0 → 2 ↑ ↓ 5 ← 1 ← 6 ☘️解析既然谈到了链表中的环问题,那么就不局限在这一题了。下面将完整的阐述「Floyd判环算法」。1)判定链表是否有环slow和fast从链表头出发,slow走一步,fast走两步,若相遇(slow==fast)则存在环。这很好理解。比如两个人一快一慢,在操场跑步,如果操场是环形的(废话),那么二者原创 2021-08-05 10:07:13 · 82 阅读 · 0 评论 -
【剑指offer】两个链表的第一个公共节点
????题目输入两个链表,找出它们的第一个公共节点。即交汇点。A: 4 → 1 ↘ 8 → 4 → 5B: 5 → 0 → 1 ↗输入:listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], intersectVal = 8输出:输出:Reference of the node with value = 8注意:公共节点是指地址相同,不是说val值相同。 ☘️解析方法:让两个指针分别指向链表A和B的头节点,开始后移;当走到终点时,就前原创 2021-08-05 10:02:00 · 114 阅读 · 0 评论 -
【剑指offer】链表的二路归并+链表的K路归并
????题目 ☘️解析 ????代码 ????补充原创 2021-08-05 10:01:03 · 278 阅读 · 0 评论 -
【剑指offer】字符的全排列
????题目输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。输入:s = “abc”输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”] ☘️解析显然,这是一个「全排列」问题。全排列的模板(即swap交换法)不再赘述,本题的关键在于「去重」。去重思路一:所有可能的排列结果(字符串)都存到Set集合中,让容器帮我们完成去重的操作。去重思路二:每一次swap的本质是固定一次index处的字符,那么原创 2021-08-03 23:34:35 · 126 阅读 · 0 评论 -
【剑指offer】正则表达式匹配
????题目请实现一个函数用来匹配包含’.‘和’*‘的正则表达式。字符’.‘表示任意一个字符,’*'表示它前面的字符可以出现任意次(含0次)。 ☘️解析首先不难想到动态规划的含义:dp[i][j]表示原串的前i个字符与匹配串的前j个字符是否匹配(注意i,j都可取0)明确了dp的含义,下面开始初始化:1)原串和匹配串都为空串的情况。空串当然可匹配空串,因此有 dp[0][0] = true 。2)原串为空串,匹配串不为空串的情况。这时竟然也可能匹配!这是因为’*‘的一个作用就是将前一原创 2021-08-03 23:34:12 · 83 阅读 · 0 评论 -
【剑指offer】打印从1到最大的n位数
????题目输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。注意,返回的是一个String类型的数组,这是为了解决大数问题。输入:2输出:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51原创 2021-08-02 15:57:27 · 88 阅读 · 0 评论 -
【剑指offer】幂函数
????题目实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入:x = 2.00000, n = 10输出:1024.00000示例 2:输入:x = 2.00000, n = -3输出:0.12500 ☘️解析1)递归先想一想如何计算7的10次幂?直接7\*7\*7\*7...\*7绝对不是好主意,在现实中我们自己也不这样计算。没错,是二分!我们先计算7^5,然后平方;7^5怎么算呢?7^4乘7; 而7^4又是7^2的平方…2)迭代递归需要额原创 2021-08-02 15:08:15 · 99 阅读 · 0 评论 -
【剑指offer】剪绳子
????题目给你一根长度为 n 的绳子,请把绳子剪成整数长度的若干段,然后把各段长度相乘,能得到的最大乘积是多少?(注:长度n至少为2,你至少要剪一次)举个例子:绳子长度为10,那么我们把它剪成 3+3+4 的多段,可以得到最大值 3×3×4=36 。 ☘️解析初步分析:2 = 1 + 1,1 × 1 = 12不应该被切3 = 1 + 2,1 × 2 = 23不应该被切4 = 2 + 2,2 × 2 = 44切不切都一样5,6,7,8,9…原创 2021-08-02 14:52:12 · 80 阅读 · 0 评论