剑指offer(C++)
Courage-Hu
邮箱-couragehu@163.com
展开
-
剑指offer(C++)--扑克牌顺子
题目LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12...原创 2019-08-13 10:05:04 · 267 阅读 · 0 评论 -
剑指offer(C++)--构建乘积数组
题目给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。class Solution {public: vector<int> multiply(const vector<int>& A) { ...原创 2019-08-15 09:45:58 · 202 阅读 · 0 评论 -
剑指offer(C++)--数组中重复的数字
题目在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。class Solution {public: bool duplicate(int numbers[], ...原创 2019-08-15 09:07:00 · 122 阅读 · 0 评论 -
剑指offer(C++)--把字符串转换成整数
题目将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0class Solution {public: i...原创 2019-08-15 08:28:38 · 1761 阅读 · 1 评论 -
剑指offer(C++)--不用加减乘除做加法
题目写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。/*首先看十进制是如何做的: 5+7=12,三步走第一步:相加各位的值,不算进位,得到2。第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果。第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。同样我们可以用三步走的方式计算二进制值相加: ...原创 2019-08-15 08:03:40 · 226 阅读 · 0 评论 -
剑指offer(C++)--求1+2+3+...+n
题目求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。class Solution {public: int Sum_Solution(int n) { int res = n; res&&(res+=Sum_Solution(n-1));...原创 2019-08-15 07:51:16 · 370 阅读 · 0 评论 -
剑指offer(C++)--孩子们的游戏(圆圈中最后剩下的数)
题目每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去....原创 2019-08-13 16:07:37 · 461 阅读 · 0 评论 -
剑指offer(C++)--第一个只出现一次的字符
题目在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).class Solution {public: int FirstNotRepeatingChar(string str) { map<char, int> mp; f...原创 2019-08-08 16:56:20 · 133 阅读 · 0 评论 -
剑指offer(C++)--丑数
题目把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。通俗易懂的解释:首先从丑数的定义我们知道,一个丑数的因子只有2,3,5,那么丑数p = 2 ^ x * 3 ^ y * 5 ^ z,换句话说一个丑数一定由另一个丑数乘以2或者乘以3或者乘以5得到,那么我们...原创 2019-08-05 22:26:23 · 959 阅读 · 0 评论 -
剑指offer(C++)--把数组排成最小的数
题目输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。class Solution {public: string PrintMinNumber(vector<int> numbers) { string res=""; ...原创 2019-08-05 21:40:54 · 362 阅读 · 0 评论 -
剑指offer(C++)--数组中出现次数超过一半的数字
题目数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。class Solution {public: int MoreThanHalfNum_Solution(vector<int> numbers) { ...原创 2019-07-23 10:12:29 · 305 阅读 · 0 评论 -
剑指offer(C++)--整数中1出现的次数(从1到n整数中1出现的次数)
题目求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。class Solution {public: int Nu...原创 2019-08-04 17:04:02 · 742 阅读 · 0 评论 -
剑指offer(C++)--正则表达式匹配
题目请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配首先,考虑特殊情况: 1>两个字符串都为空,返回true 2&...原创 2019-08-15 14:50:00 · 306 阅读 · 0 评论 -
剑指offer(C++)--表示数值的字符串
题目请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。class Solution {public: bool isNumeric(char* str) { ...原创 2019-08-15 15:17:22 · 167 阅读 · 0 评论 -
剑指offer(C++)--链表中环的入口结点
题目给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNo...原创 2019-08-15 16:12:01 · 218 阅读 · 0 评论 -
剑指offer(C++)--翻转单词顺序列
题目牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?class Sol...原创 2019-08-13 09:20:57 · 476 阅读 · 0 评论 -
剑指offer(C++)--左旋转字符串
题目汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!class Solution {public: string LeftRotateS...原创 2019-08-13 08:54:19 · 363 阅读 · 0 评论 -
剑指offer(C++)--和为S的两个数字
题目输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。class Solution {public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { vector<int> re...原创 2019-08-13 08:25:03 · 308 阅读 · 0 评论 -
剑指offer(C++)--和为S的连续正数序列
题目小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数序列...原创 2019-08-12 18:02:24 · 406 阅读 · 0 评论 -
剑指offer(C++)--数组中只出现一次的数字
题目一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。class Solution {public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { int len = data.size(); if(len<2...原创 2019-08-12 17:41:59 · 186 阅读 · 0 评论 -
剑指offer(C++)--平衡二叉树
题目输入一棵二叉树,判断该二叉树是否是平衡二叉树。class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { if(pRoot==NULL) return true; int left_depth = getdepth(pRoot->left);...原创 2019-08-12 14:50:43 · 196 阅读 · 0 评论 -
剑指offer(C++)--二叉树的深度
题目输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。class Solution {public: int TreeDepth(TreeNode* pRoot) { int height = 0; if (pRoot != nullptr) { height++; i...原创 2019-08-12 10:50:42 · 1586 阅读 · 0 评论 -
剑指offer(C++)--两个链表的第一个公共结点
题目输入两个链表,找出它们的第一个公共结点。解法一两个链表一定有交点的话,方法是指向短链表指针先走完,然后指向长链表,指向长链表指针后走完,指向短链表。所以,第二次走过,一定会在交点相遇。class Solution {public: ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) { ...原创 2019-08-12 09:38:13 · 335 阅读 · 2 评论 -
剑指offer(C++)--对称的二叉树
题目请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。非递归/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left...原创 2019-08-15 17:52:26 · 243 阅读 · 0 评论 -
剑指offer(C++)--二叉树的下一个结点
题目给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。结合图,我们可发现分成两大类:1、有右子树的,那么下个结点就是右子树最左边的点;(eg:D,B,E,A,C,G) 2、没有右子树的,也可以分成两类,a)是父节点左孩子(eg:N,I,L) ,那么父节点就是下一个节点 ; b)是父节点的右孩子(eg:H,...原创 2019-08-15 17:36:56 · 170 阅读 · 0 评论 -
剑指offer(C++)--删除链表中重复的结点
题目在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5class Solution {public: ListNode* deleteDuplication(ListNode* pHead) { ...原创 2019-08-15 16:25:36 · 337 阅读 · 0 评论 -
剑指offer(C++)--字符串的排列
题目输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。class Solution {public: vector<string> result; void permutation1(string str,int begin){ ...原创 2019-07-22 18:03:06 · 189 阅读 · 0 评论 -
剑指offer(C++)--二叉搜索树与双向链表
二叉搜索树与双向链表输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(N...原创 2019-07-22 14:28:10 · 329 阅读 · 0 评论 -
剑指offer(C++)--复杂链表的复制
题目输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)/*struct RandomListNode { int label; struct RandomListNode *next, *random; ...原创 2019-07-21 21:59:37 · 373 阅读 · 0 评论 -
剑指offer(C++)--反转链表
题目输入一个链表,反转链表后,输出新链表的表头。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNode* pHead)...原创 2019-07-18 15:56:35 · 135 阅读 · 0 评论 -
剑指offer(C++)--链表中倒数第k个结点
题目输入一个链表,输出该链表中倒数第k个结点。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindKthToTail(ListNode* pList...原创 2019-07-18 15:34:29 · 231 阅读 · 0 评论 -
剑指offer(C++)--调整数组顺序使奇数位于偶数前面
题目输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。class Solution {public: void reOrderArray(vector<int> &array) { vector<int> result_...原创 2019-07-18 14:48:30 · 227 阅读 · 0 评论 -
剑指offer(C++)--数值的整数次方
题目给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。class Solution {public: double Power(double base, int exponent) { if(0 == exponent) return 1; if(1 == exponent) return base; ...原创 2019-07-18 11:50:10 · 112 阅读 · 0 评论 -
剑指offer(C++)--二进制中1的个数
题目输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。class Solution {public: int NumberOf1(int n) { int result = 0; unsigned int flag = 1; while(flag) { if(n&am...原创 2019-07-18 10:59:09 · 165 阅读 · 0 评论 -
剑指offer(C++)--矩形覆盖
题目我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?class Solution {public: int rectCover(int number) { vector<int> r(number + 1, 0); r[1] = 1; r[2] = 2;...原创 2019-07-18 10:44:59 · 224 阅读 · 0 评论 -
剑指offer(C++)--变态跳台阶
题目一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。class Solution {public:/*每个台阶可以看作一块木板,让青蛙跳上去,n个台阶就有n块木板,最后一块木板是青蛙到达的位子, 必须存在,其他 (n-1) 块木板可以任意选择是否存在,则每个木板有存在和不存在两种选择,(n-1) 块木板 就有 [2^...原创 2019-07-18 10:14:24 · 572 阅读 · 1 评论 -
剑指offer(C++)--跳台阶
题目一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。class Solution {public: int jumpFloor(int number) { vector<int> r(number + 1, 0); r[1] = 1; r[2] = 2; ...原创 2019-07-18 09:15:12 · 175 阅读 · 0 评论 -
剑指offer(C++)--斐波那契数列
题目题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39class Solution {public: int Fibonacci(int n) { int result[2] = {0,1}; if(n < 2) return result...原创 2019-07-18 08:36:04 · 168 阅读 · 0 评论 -
剑指offer(C++)--从尾到头打印链表
题目输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/class...原创 2019-07-15 18:50:21 · 194 阅读 · 0 评论 -
剑指offer(C++)--替换空格
题目请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。class Solution {public: void replaceSpace(char *str,int length) { /*length 为字符数组str的总容量,大于或等于字符串str的实际长度*...原创 2019-07-15 17:42:50 · 91 阅读 · 0 评论