
leetcode
编解码
大不自多,海纳江河
展开
-
CPP之剑指 Offer 57 - II. 和为s的连续正数序列
题目描述:输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]题目分析:根据题目要求,让我们找到所有和为target的正整数连续序列,即输入int类型的target,输出一个二维数组。函数形式如下:vector<原创 2020-07-12 16:22:20 · 110 阅读 · 0 评论 -
CPP之剑指 Offer 58 - II. 左旋转字符串
题目描述:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = “abcdefg”, k = 2输出: “cdefgab”示例 2:输入: s = “lrloseumgh”, k = 6输出: “umghlrlose”题目分析:题目要求就是实现一个坐旋转字符串的函数。输入是一个string s和需要旋转的位数int n原创 2020-07-12 16:01:28 · 137 阅读 · 0 评论 -
CPP之剑指 Offer 60. n个骰子的点数
题目描述:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。示例 1:输入: 1输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]示例 2:输入: 2输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.11111原创 2020-07-12 15:27:52 · 133 阅读 · 0 评论 -
CPP之剑指 Offer 61. 扑克牌中的顺子
题目描述:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。示例 1:输入: [1,2,3,4,5]输出: True示例 2:输入: [0,0,1,2,5]输出: True题目分析:根据题意,函数名暂定为isStraight,函数输入是一维数组且大小为5,vector& nums,输出是0或1。bool isStraight(vector<i原创 2020-07-12 14:58:54 · 156 阅读 · 0 评论 -
CPP之剑指 Offer 63. 股票的最大利润
题目描述:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 2:输入: [7,6,4,3,1]输出: 0解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。题目分析:根据题目可以知道,函数原创 2020-07-12 14:43:59 · 202 阅读 · 0 评论 -
CPP之剑指 Offer 64. 求1+2+…+n
题目描述:求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45题目分析:既然不能使用加减乘除等等诸多工具,那就递归吧。代码:class Solution {public: int sumNums(int n) { n && (n += sumNums(n-1));原创 2020-07-12 14:30:07 · 97 阅读 · 0 评论 -
CPP剑指 Offer 65. 不用加减乘除做加法
题目描述:写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。示例:输入: a = 1, b = 1输出: 2提示:a, b 均可能是负数或 0,结果不会溢出 32 位整数解题思路不能使用加减乘除四则运算,所以只能返本溯源想到使用二进制的位运算实现相加操作。二进制位运算中,异或操作: 1^1=0 0^0=0 1^0=1 0^1=1,可以模拟无进位的加操作;与操作:1&1=1 0&1=0 1&0=0 0&0=0,原创 2020-07-11 21:41:36 · 207 阅读 · 0 评论 -
CPP之剑指 Offer 66. 构建乘积数组
题目描述:给定一个数组 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]。不能使用除法。示例:输入: [1,2,3,4,5]输出: [120,60,40,30,24]提示:所有元素乘积之和不会溢出 32 位整数a.length <= 100000题目分析:根据题目描述,函数名是constructArr,函数输入是vector& a,返回值应当是新的数组 vec原创 2020-07-11 21:31:07 · 233 阅读 · 0 评论 -
CPP之剑指 Offer 67. 把字符串转换成整数
题目描述:写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。注意:假如该字符串中原创 2020-07-11 21:13:26 · 613 阅读 · 0 评论 -
CPP之面试题68 - I. 二叉搜索树的最近公共祖先
题目描述:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”题意分析:首先根据题目我们可以知道,我们解答这道题目需要完成的函数名可以为“最近公共祖先”的音译,即lowestCommonAncestor,其次函数的输入是一个二叉搜索树,以及树中的两个子节点。函数的返回值应当是一个满足“最近公共祖先”要求的数原创 2020-07-11 20:54:12 · 136 阅读 · 0 评论 -
CPP之面试题68 - II. 二叉树的最近公共祖先
题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先。思路:1.在root的左子树和右子树同时找p和q,若p和q分别在root的左右子树,则root为所求.2.若左子树返回NULL,则说明p和q都在右子树,则进入右子树做1.3.若右子树返回NULL,则说明p和q都在左子树,则进入左子树左1.解答:/*原创 2020-07-11 20:08:37 · 145 阅读 · 0 评论