![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode题目解析
LITTENg
这个作者很懒,什么都没留下…
展开
-
806. 写字符串需要的行数
题目描述: 我们要把给定的字符串 S 从左到右写到每一行上,每一行的最大宽度为100个单位,如果我们在写某个字母的时候会使这行超过了100 个单位,那么我们应该把这个字母写到下一行。我们给定了一个数组 widths ,这个数组 widths[0] 代表 ‘a’ 需要的单位, widths[1] 代表 ‘b’ 需要的单位,…, widths[25] 代表 ‘z’ 需要的单位。现在回答两个问题:...原创 2018-04-22 10:30:53 · 668 阅读 · 2 评论 -
693. 交替位二进制数--一行代码搞定
题目描述: 给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。示例 1:输入: 5 输出: True 解释: 5的二进制数是: 101 示例 2:输入: 7 输出: False 解释: 7的二进制数是: 111 示例 3:输入: 11 输出: False 解释: 11的二进制数是: 1011 示例 4:输入...原创 2018-04-24 20:37:12 · 724 阅读 · 0 评论 -
477. 汉明距离总和
题目描述: 两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。计算一个数组中,任意两个数之间汉明距离的总和。示例:输入: 4, 14, 2输出: 6解释: 在二进制表示中,4表示为0100,14表示为1110,2表示为0010。(这样表示是为了体现后四位之间关系) 所以答案为: HammingDistance(4, 14) + HammingDistanc...原创 2018-04-21 09:59:28 · 1633 阅读 · 0 评论 -
762. 二进制表示中质数个计算置位
题目描述: 给定两个整数 L 和 R ,找到闭区间 [L, R] 范围内,计算置位位数为质数的整数个数。(注意,计算置位代表二进制表示中1的个数。例如 21 的二进制表示 10101 有 3 个计算置位。还有,1 不是质数。)示例 1:输入: L = 6, R = 10 输出: 4 解释: 6 -> 110 (2 个计算置位,2 是质数) 7 -> 111 (3 ...原创 2018-04-21 10:42:43 · 940 阅读 · 0 评论 -
728. 自除数
题目描述: 自除数 是指可以被它包含的每一位数除尽的数。例如,128 是一个自除数,因为 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。还有,自除数不允许包含 0 。给定上边界和下边界数字,输出一个列表,列表的元素是边界(含边界)内所有的自除数。示例 1:输入: 上边界left = 1, 下边界right = 22 输出: [1, 2, ...原创 2018-04-21 16:52:42 · 1722 阅读 · 0 评论 -
507. 完美数
题目描述: 对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为“完美数”。给定一个 正整数 n, 如果他是完美数,返回 True,否则返回 False示例:输入: 28 输出: True 解释: 28 = 1 + 2 + 4 + 7 + 14注意:输入的数字 n 不会超过 100,000,000. (1e8)题目分析:易知一个数n一半的因子都在 ...原创 2018-05-05 09:45:12 · 1409 阅读 · 0 评论 -
2. 两数相加--类似两条链表的合并
题目描述: 给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 题目分析:这道题目就...原创 2018-05-05 10:54:07 · 349 阅读 · 0 评论 -
111. 二叉树的最小深度--递归
题目分析: 因为是求的最小深度,一个注意点就是:如果该节点为空,那么其深度为0,如果一个节点的左子树为空,那么可以肯定的是该节点的最小深度一定不是其左子树决定的,同样如果一个节点的右子树为空,那么该节点的最小深度也一定不是其右子树决定的,如果两个子树都为空,那么其最小深度就是1。这样递归判断即可/** * Definition for a binary tree node. * s...原创 2018-04-29 10:13:04 · 340 阅读 · 0 评论 -
572. 另一个树的子树
题目分析:另外写一个函数用于判断两颗二叉树是不是相同的。然后依次挪动s的位置,对s当前指的节点调用上面的函数,进行判断。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeN...原创 2018-04-29 10:34:34 · 299 阅读 · 0 评论 -
204. 计数质数---筛选法
题目:统计所有小于非负数整数 n 的质数的数量。示例:输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。 题目分析:其实就是判断小于n的所有质数的个数。我使用的是筛选法: 设置标记数组flag[n+1],初始化都为false,已知2是质数,那么可以肯定的是凡是2的倍数的数都不是质数了,将这些数的标记都置为true。然后往下遍历发现...原创 2018-04-29 21:40:17 · 1736 阅读 · 0 评论 -
397. 整数替换---坑点
题目描述: 给定一个正整数 n,你可以做如下操作:如果 n 是偶数,则用 n / 2替换 n。如果 n 是奇数,则可以用 n + 1或n - 1替换 n。 n 变为 1 所需的最小替换次数是多少? 题目分析: 因为第二步有两种选择使用n+1或者n-1替换,又要求最少的次数。思考之后使用递归的方法,递归边界是:n==1,返回0。其中有个注意点是如果n的初始值是int类型的最大值(是个...原创 2018-04-29 21:50:04 · 861 阅读 · 0 评论 -
189. 旋转数组--三次区间翻转
题目描述; 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4] 示例 2:输入: [-...原创 2018-04-29 22:05:21 · 539 阅读 · 0 评论 -
61. 旋转链表
题目分析:分析题目的要求之后,有点像先找到链表的倒数第k个结点,然后将链表首位相连在一起成环状,然后从倒数第k个结点成为新的头节点,从其前面断开。 先让q指针从head出发往后遍历k+1个结点,开始让p也从head出发和q一起同时往后挪动,当q到链表的最后一个结点的时候,p所指的结点就是倒数第k+1个结点。/** * Definition for singly-linked list. ...原创 2018-04-29 22:35:58 · 365 阅读 · 0 评论 -
461. 汉明距离--位运算
题目描述: 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意: 0 ≤ x, y < 231.示例:输入: x = 1, y = 4输出: 2解释: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑上面的箭头指出了对应二进制位不同的位置。 题目分析...原创 2018-04-20 15:46:23 · 667 阅读 · 0 评论 -
350. 两个数组的交集 II
题目描述: 给定两个数组,写一个方法来计算它们的交集。例如: 给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].注意:输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。 我们可以不考虑输出结果的顺序。 跟进:如果给定的数组已经排好序呢?你将如何优化你的算法? 如果 nums1 的大小比 nums2 ...原创 2018-04-20 15:34:41 · 211 阅读 · 0 评论 -
226. 翻转二叉树--递归
题目分析: 直接递归即可,代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), ...原创 2018-04-22 10:39:43 · 318 阅读 · 0 评论 -
617. 合并二叉树
题目分析: 题目要求将两个二叉树实现合并,那么可以使用递归的思想,首先判断t1和t2的性质: 1. 如果都不空,那么t1的结点值更新为两者的结点值之和,之后t1的新左子树就是递归处理t1和t2的左子树得到结果,同理可得t1的新的右子树。 2. 如果只有t2不空,那么返回t2结点即可; 3. 如果只有t1不空,直接返回t1结点; 4. 如果两结点都为...原创 2018-04-22 11:43:00 · 2447 阅读 · 0 评论 -
538. 把二叉搜索树转换为累加树
题目分析: 其实只要看到BST就应该立马想到它的一个重要的性质:其中序遍历序列是非递减的。因此本题目的思路就是:先求树中所有结点值的和sum,然后中序遍历BST,用sum代替之前的结点值,然后更新sum。 请看下面的代码:class Solution {public: void inorder(TreeNode*root,int &sum){ ...原创 2018-04-22 12:25:57 · 1622 阅读 · 0 评论 -
766. 托普利茨矩阵
题目分析: [i,j]位置对应的对角线上的下一个元素的位置为[i+1,j+1];class Solution {public: bool isToeplitzMatrix(vector<vector<int>>& matrix) { for(int i=0;i<matrix.size();i++){ ...原创 2018-04-22 12:40:56 · 572 阅读 · 0 评论 -
389. 找不同
题目分析: 将两个字符串按照字母序进行排序,然后从头开始遍历,找出第一个不相等的元素即为所求。class Solution {public: char findTheDifference(string s, string t) { sort(s.begin(),s.end()); sort(t.begin(),t.end()); ...原创 2018-04-22 13:37:41 · 485 阅读 · 0 评论 -
520. 检测大写字母
题目分析: 注意点: 1. 只有一个字母的时候,都是对的直接返回true. 2. 如果首字母是小写的,只要后面没有大写字母就是true 3. 如果首字母是大写,只要后面不同时出现大小写字母,则trueclass Solution {public: bool detectCapitalUse(string word) { ...原创 2018-04-22 14:29:32 · 514 阅读 · 0 评论 -
23. 合并K个排序链表--有序链表的合并问题
题目描述: 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1->1->2->3->4->4->5->6 题目分析: 首先写一个将两个有序链表合并为一个链表的函数,使用此函数将lists中...原创 2018-04-22 16:37:52 · 1596 阅读 · 0 评论 -
415. 字符串相加
题目描述: 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。注意:num1 和num2 的长度都小于 5100.num1 和num2 都只包含数字 0-9.num1 和num2 都不包含任何前导零。 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。 题目分析: 没什么难点,设置两个变量i,j分别从num1和num2的...原创 2018-04-22 20:27:07 · 936 阅读 · 0 评论 -
43. 字符串相乘
题目描述: 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = “2”, num2 = “3” 输出: “6” 示例 2:输入: num1 = “123”, num2 = “456” 输出: “56088” 说明:num1 和 num2 的长度小于110。num...原创 2018-04-22 21:25:53 · 367 阅读 · 0 评论 -
690. 员工的重要性
题目描述: 给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度 和 直系下属的id。比如,员工1是员工2的领导,员工2是员工3的领导。他们相应的重要度为15, 10, 5。那么员工1的数据结构是[1, 15, [2]],员工2的数据结构是[2, 10, [3]],员工3的数据结构是[3, 5, []]。注意虽然员工3也是员工1的一个下属,但是由于并不是直系下属,因此没有体现在员工...原创 2018-04-20 13:39:59 · 580 阅读 · 0 评论 -
349. 两个数组的交集
题目描述: 给定两个数组,写一个函数来计算它们的交集。例子:给定 num1= [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].提示:每个在结果中的元素必定是唯一的。 我们可以不考虑输出结果的顺序。 题目分析: 要找到两个数组的交集,先对两个数组进行排序,之后从每个数组的开始进行遍历,如果是公共元素,那么放入set容器当中。class Sol...原创 2018-04-20 15:28:58 · 374 阅读 · 0 评论 -
231. 2的幂
题目分析: 除了特殊数字1之外,凡是2的幂的整数,在整除2的时候余数都为0,并且一直除以2最后总能得到商是1。 此外还需要注意0这个情况。//C++class Solution {public: bool isPowerOfTwo(int n) { while(n >= 2 && n % 2 == 0){ ...原创 2018-06-19 16:08:22 · 295 阅读 · 0 评论