![](https://img-blog.csdnimg.cn/20210510093423268.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
剑指offer
LeetCode内的剑指offer的解答
杨戬没有你我怎么活
喜欢的人是杨戬!
展开
-
剑指 Offer 18. 删除链表的节点
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* deleteNode(ListNode* head, int val) { ListNode* H原创 2021-05-11 10:09:28 · 58 阅读 · 0 评论 -
剑指 Offer 17. 打印从1到最大的n位数
class Solution {public: vector<int> printNumbers(int n) { vector<int>ans; for(int i = 1;i<=pow(10,n)-1;i++) ans.push_back(i); return ans; }};原创 2021-05-11 10:08:57 · 60 阅读 · 0 评论 -
剑指 Offer 16. 数值的整数次方
class Solution {public: double myPow(double x, int n) { double ans = 1; double a = x; long n1 = n; int flag = n1<0 ? 1 : 0; n1 = abs(n1); while(n1) { if(n1&1)原创 2021-05-11 10:08:30 · 66 阅读 · 0 评论 -
剑指 Offer 15. 二进制中1的个数
class Solution {public: int hammingWeight(uint32_t n) { bitset<32>b(n); return b.count(); }};原创 2021-05-11 10:07:17 · 59 阅读 · 0 评论 -
剑指 Offer 14- II. 剪绳子 II
class Solution {public: int cuttingRope(int n) { if(n <= 2) return 1; if(n == 3) return 2; long ans = 1; while(n > 4) { ans = (ans*3)%1000000007; n-=3; } ans = (ans*原创 2021-05-11 10:06:47 · 80 阅读 · 0 评论 -
剑指 Offer 14- I. 剪绳子.md
class Solution {public: int cuttingRope(int n) { if(n <= 3) return n-1; int cnt = n/3; int t = n-cnt*3; if(t == 0) return pow(3,cnt); if(t == 1) return pow(3,cnt-1)*4; return pow(3,c原创 2021-05-11 10:06:11 · 88 阅读 · 0 评论 -
剑指 Offer 13. 机器人的运动范围
class Solution {public: int movingCount(int m, int n, int k) { vector<vector<bool>>vis(m,vector<bool>(n,false)); int dx[4] = {-1,1,0,0}; int dy[4] = {0,0,1,-1}; queue<pair<int,int>>q;原创 2021-05-10 09:53:19 · 73 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字
class Solution {public: int minArray(vector<int>& numbers) { int low = 0,high = numbers.size()-1; while(low<high) { int mid = low + (high-low)/2; if(numbers[mid]<numbers[high]) high = mid原创 2021-05-10 09:51:35 · 53 阅读 · 0 评论 -
剑指 Offer 10- II. 青蛙跳台阶问题
class Solution {public: int numWays(int n) { vector<int>dp(n+1,1); if(n>=2) { dp[1] = 1; for(int i = 2;i<=n;i++) { dp[i] = (dp[i-1]+dp[i-2])%1000000007;原创 2021-05-10 09:49:21 · 52 阅读 · 0 评论 -
剑指 Offer 10- I. 斐波那契数列
class Solution {public: int fib(int n) { if(n<=1) return n; vector<int>dp(n+1,0); dp[1] = 1; for(int i = 2;i<=n;i++) { dp[i] = (dp[i-1]+dp[i-2])%1000000007; } ret原创 2021-05-10 09:42:18 · 53 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
class CQueue {stack<int>s1,s2;public: CQueue() { } void appendTail(int value) { s1.push(value); } int deleteHead() { while(!s1.empty()) { int t = s1.top();原创 2021-05-10 09:41:45 · 57 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* buildTree(vector<i原创 2021-05-10 09:41:06 · 56 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: vector<int> reversePrint(ListNode* head) { vector<i原创 2021-05-10 09:40:09 · 52 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
class Solution {public: string replaceSpace(string s) { for(int i = 0;i<s.size();i++) { if(s[i] == ' ') { s = s.substr(0,i)+"%20"+s.substr(i+1,s.size()-i-1); i+=2;原创 2021-05-10 09:39:36 · 48 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
class Solution {public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { int r = matrix.size()-1; int c = 0; while(r >= 0 && c < matrix[0].size()) {原创 2021-05-10 09:39:01 · 45 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字
class Solution {public: int findRepeatNumber(vector<int>& nums) { int zero = 0; for(int i = 0;i<nums.size();i++) { if(nums[abs(nums[i])] == 0) zero++; nums[abs(nums[i])] = -nums[abs(nums[i])原创 2021-05-10 09:38:12 · 48 阅读 · 0 评论 -
剑指 Offer 面试题48. 最长不含重复字符的子字符串
题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度...原创 2020-06-06 20:31:00 · 165 阅读 · 0 评论 -
剑指 Offer 面试题45. 把数组排成最小的数
题目:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例 1:输入: [10,2]输出: "102"示例2:输入: [3,30,34,5,9]输出: "3033459"题解:其实就是字典序排序,但是要考虑到的是比自己更长的字符串更长的那一部分,不能简单判断大小,因此全部排序a+b < b+a即可。代码:class Solution {public: bool static cmp(const stri.原创 2020-06-01 17:19:13 · 272 阅读 · 0 评论 -
剑指 Offer 60. n个骰子的点数
题目把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。思路 这道题是老dp了。首先,为什么会想到dp呢?这道题明显只有两个变量,一个是骰子的数量,一个就是n个骰子所可以组成的数。明显我们需要求出所有的子问题,才可能知道答案。那么,确认了问题之后,我们开始划分模型,前n个骰子和前n-1个骰子之间的联系是什么呢?我们很容易可以想到是增加1-6。原创 2020-10-30 10:28:50 · 90 阅读 · 0 评论 -
剑指 Offer 32 - III. 从上到下打印二叉树 III
这道题目比较简单。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<vector<int>>原创 2020-10-24 21:21:50 · 93 阅读 · 0 评论 -
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面(sort cmp)
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。提示:1 <= nums.length <= 500001 <= nums[i] <= 10000题解:这道题考的,好吧我偷懒了。cmp的精髓就是返回1就是a和b顺序不变,返回0就是要调换顺序。class Solution原创 2020-06-24 16:52:23 · 105 阅读 · 0 评论 -
剑指 Offer 44. 数字序列中某一位的数字
文章目录题目:示例 1:示例 2:限制:题解:题目:数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。示例 1:输入:n = 3输出:3示例 2:输入:n = 11输出:0限制:0 <= n < 2^31题解:这道题就是一道找规律的题目,主要就是发现1-9可以占9格,10-99可以占180格,100-999可以占2原创 2020-06-24 16:18:40 · 115 阅读 · 0 评论 -
剑指 Offer 40. 最小的k个数
题目:输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]示例 2:输入:arr = [0,1,2,1], k = 1输出:[0]限制:0 <= k <= arr.length <= 100000 <= arr[i] <= 10000题解:这道题就是明显的堆,思路很简单,当堆未原创 2020-06-24 15:20:30 · 109 阅读 · 0 评论 -
剑指 Offer 42. 连续子数组的最大和
文章目录题目示例1:提示:题解:题目输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1 <= arr.length <= 10^5-100 <= arr[i] <= 100题解:这道题关键在于定义状态,是一道dp的题目。我原创 2020-06-24 11:52:46 · 153 阅读 · 0 评论 -
剑指 Offer 56 - II. 数组中数字出现的次数 II
题目:在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例 1:输入:nums = [3,4,3,3]输出:4示例 2:输入:nums = [9,1,7,9,7,9,7]输出:1限制:1 <= nums.length <= 100001 <= nums[i] < 2^31题解:这道题的关键就在于只有一个数字只出现了一次,其他都出现了三次,那么按位来讲,相同位全部加起来,那个特殊的数在位上为1时,结果是3原创 2020-06-24 11:13:38 · 177 阅读 · 0 评论 -
剑指 Offer 33. 二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树: 5 / \ 2 6 / \ 1 3示例 1:输入: [1,6,3,2,5]输出: false示例 2:输入: [1,3,2,6,5]输出: true提示:数组长度 <= 1000题解:这道题关键就在于根节点的左子树都是小于它的,右子树都是大于根节点的,而数原创 2020-06-23 21:33:38 · 68 阅读 · 0 评论 -
剑指 Offer 26. 树的子结构
题目:输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A: 3/ \4 5/ 1 2给定的树 B:4/1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false示例 2:输入:A = [3,4,5,1,2], B = [4,1]输出:true限制:0 <=原创 2020-06-23 17:52:55 · 125 阅读 · 0 评论 -
剑指 Offer 14- I. 剪绳子(双解法,DP+数论)
题目:给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 ×原创 2020-06-23 17:36:14 · 188 阅读 · 0 评论 -
剑指 Offer 47. 礼物的最大价值
题目在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例输入: [ [1,3,1], [1,5,1], [4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物题解这道题是个简单的贪心class Solution {public: int m原创 2020-06-21 10:33:05 · 76 阅读 · 0 评论 -
剑指 Offer 16. 数值的整数次方
题目实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25题解快速幂,注意n是负数时,-2147483648使用右移会变成-1,-1原创 2020-06-21 09:51:25 · 84 阅读 · 0 评论 -
剑指 Offer 38. 字符串的排列
剑指 Offer 38. 字符串的排列题目:示例:题解:题目:输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = "abc"输出:["abc","acb","bac","bca","cab","cba"]题解:全排列class Solution {public: vector<string> permutation(string s) { sort(s.begin(),s.en原创 2020-06-21 08:38:09 · 100 阅读 · 0 评论 -
剑指 Offer 32 - I. 从上到下打印二叉树
题解:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回:[3,9,20,15,7]提示:节点总数 <= 1000题解: 层序遍历:/** * Definition for a binary tree node. * struct TreeNode ...原创 2020-06-20 22:17:56 · 83 阅读 · 0 评论 -
剑指 Offer 18. 删除链表的节点
题目:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为1的第三个节点,那...原创 2020-06-20 21:27:12 · 124 阅读 · 0 评论