![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指Offer
剑指Offer刷题专栏
Why not?
这个作者很懒,什么都没留下…
展开
-
11.二进制中1的个数
二进制中1的个数题目描述输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示题解不能将这个数右移,负数的话首位会补1。可以用0x01左移。也可以用val & (val - 1)判断。class Solution {public: int NumberOf1(int n) { int ans = 0; while(n != 0){ ans++; n = n & (n-1原创 2020-07-17 22:10:39 · 134 阅读 · 0 评论 -
10.矩形覆盖
矩形覆盖题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?题解动规,dp[n] = dp[n-1]+dp[n-2], dp[1] = 1。class Solution {public: int rectCover(int number) { if(number == 0 || number == 1) return number; int a = 0, b = 1, c;原创 2020-07-13 17:24:49 · 144 阅读 · 0 评论 -
9.变态跳台阶
变态跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题解f(n)=f(n-1)+f(n-2)+……f(1)f(n-1)=f(n-2)+……f(1)两式相减得f(n)=2f(n-1)class Solution {public: int jumpFloorII(int number) { int &n = number; if(n == 0 || n == 1) retu原创 2020-07-13 17:15:31 · 132 阅读 · 0 评论 -
8.跳台阶
跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)类似Fibonacciclass Solution {public: int jumpFloor(int number) { vector<int> dp(1000,0); dp[1] = 1; dp[2] = 2; for(int i = 3; i <= number ;i++)原创 2020-07-13 16:46:37 · 72 阅读 · 0 评论 -
7.斐波那契数列
斐波那契数列题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。记忆化搜索class Solution {public: int dfs(int n, vector<int>& dp){ if(n == 0 || n == 1) return n; if(dp[n] != -1) return dp[n]; return dp[n] = dfs(n-1,原创 2020-07-13 16:30:54 · 160 阅读 · 1 评论 -
6.旋转数组的最小数字
旋转数组的最小数字题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。题解这题可以看作两个非递减数组拼接,右边<=左边,寻找中间分界线。二分查找拐点arr[mid]<arr[mid-1]。二分比较的重点是,只能和最右端元素比较。如果和最左端比较,例如4,5,原创 2020-07-13 16:13:06 · 70 阅读 · 0 评论 -
3.从头到尾输出链表
从头到尾输出链表题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。思路1.反转链表2.递归3.栈C++ 反转链表class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { ListNode* tail = NULL; while(head){ ListNode *nex = head->next原创 2020-07-07 17:03:10 · 191 阅读 · 0 评论 -
2.替换空格
替换空格题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路从右往左复制。class Solution {public: void replaceSpace(char *str,int length) { if(str == nullptr || length <= 0 ) return; int cnt = 0; for(原创 2020-07-07 15:54:51 · 70 阅读 · 0 评论 -
1.二维数组中的查找
二维数组中的查找题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路可以从右上角和左下角两个特殊位置开始搜索。对右上角元素,左边都比它小,下边都比它大。左下角类似。所以是O(m+n)。C++:class Solution {public: bool Find(int target, vector<vector<int>原创 2020-07-07 11:22:22 · 146 阅读 · 0 评论