![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
youthinkwu
这个作者很懒,什么都没留下…
展开
-
292. Nim Game LeetCode
题意:有一堆石头,你和你的朋友每次可以从里面拿出1到3个石头,最后取完石头的人胜利,两个人都会做出最优选择,你是先手,问在给定的石头数目下,你是否能取得胜利。 题解:巴什博奕。巴什博弈:只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取原创 2016-02-10 11:47:52 · 247 阅读 · 0 评论 -
258. Add Digits LeetCode
题意:给你一个数字,然后把数字的每一位拆开相加得到新的数字,不停的重复这个过程知道最后得到的数字只有一位,求这个数字是多少。 题解:假设输入的数字是一个5位数字num,则num的各位分别为a、b、c、d、e。 有如下关系:num = a * 10000 + b * 1000 + c * 100 + d * 10 + e 即:num = (a + b + c + d + e) + (a * 99原创 2016-02-10 12:02:13 · 203 阅读 · 0 评论 -
104. Maximum Depth of Binary Tree LeetCode
题意:求二叉树的最大深度。 题解:递归求,从根节点出发的最大深度等于从左儿子出发的最大深度+1或者从右儿子出发的最大深度加1.class Solution {public: int maxDepth(TreeNode* root) { if(root == NULL) return 0; if(root->left == NULL && root->rig原创 2016-02-10 12:06:10 · 232 阅读 · 0 评论 -
237. Delete Node in a Linked List LeetCode
题意:删除链表的给定节点。 题解:比如a->b->c->d->e,我们要删除c。那么我把d的值赋给c,把c的next链接到e,然后把d删除,就完成了删除c。class Solution {public: void deleteNode(ListNode* node) { ListNode* b = node->next; node->val = b->va原创 2016-02-10 12:11:31 · 214 阅读 · 0 评论 -
226. Invert Binary Tree LeetCode
题意:翻转一棵二叉树。 题解:递归交换左右子树。class Solution {public: TreeNode* invertTree(TreeNode* root) { if(root == NULL) return root; else { swap(root->left,root->right);原创 2016-02-10 12:13:22 · 199 阅读 · 0 评论 -
283. Move Zeroes LeetCode
题意:给出一个数组,要求不使用额外空间将数组里面的0全部挪到最后。 题解;用一个count记录出现了多少个0,用一个index记录目前不为零的数有几个,一边记录一边填不为0的数。最后补0。class Solution {public: void moveZeroes(vector<int>& nums) { int index = 0,count = 0,n = nums原创 2016-02-10 12:17:23 · 164 阅读 · 0 评论 -
100. Same Tree LeetCode
题意:判断两棵树是否一样。 题解:递归判断,先看根一不一样,再看左右儿子一不一样。class Solution {public: bool isSameTree(TreeNode* p, TreeNode* q) { if(p == NULL && q == NULL) return true; else if(p == NULL || q == NULL原创 2016-02-10 12:22:29 · 187 阅读 · 0 评论 -
242. Valid Anagram LeetCode
题意:给出两个字符串,判断两个字符串是否能通过改变字母位置变成相同的字符串。 题解:用桶记录每个字母出现的次数,然后比较两个字符串的桶,看是否一样。class Solution {public: bool isAnagram(string s, string t) { int count1[256],count2[256],len1,len2; len1原创 2016-02-10 12:27:07 · 200 阅读 · 0 评论 -
171. Excel Sheet Column Number LeetCode
题意:将Excel 中的字母计数转换成10进制计数。 题解:其实就是26进制转换成10进制。class Solution {public: int titleToNumber(string s) { int n = s.length(); int ans = 0; for(int i = 0; i < n; i++) {原创 2016-02-10 12:32:50 · 194 阅读 · 0 评论 -
217. Contains Duplicate LeetCode
题意:给一个数组,判断是否有数字出现了多次。 题解:用桶把每个数出现次数记录一下。这里我使用mapclass Solution {public: bool containsDuplicate(vector<int>& nums) { map<int,int> count; count.clear(); int n = nums.size()原创 2016-02-10 12:36:34 · 172 阅读 · 0 评论 -
169. Majority Element LeetCode
题意:给一个数组,求那个出现次数大于[n/2](向下取整)的元素。 题解:可以用桶记录每个元素出现的次数,然后在找出那个元素。用map实现是O(nlogn)的。还有一种解法是,用一个计数器count记录当前出现最多的数字的次数,用一个num记录当前出现次数最多的元素。这是基于一定存在一个元素出现次数大于大于[n/2](向下取整)。遍历数组,当num == nums[i],那么我们计数器+1,不然-原创 2016-02-10 12:48:13 · 177 阅读 · 0 评论 -
235. Lowest Common Ancestor of a Binary Search Tree LeetCode
题意:求一棵二叉搜索树的两个节点的最近公共祖先。 题解:利用二叉搜索树的性质,可以很方便的求解。递归的去求两个节点的最近公共祖先,首先看两个节点的值与当前节点的大小关系,如果两个节点的值一个小于等于当前节点值,另一个大于等于当前节点的值,那么这个当前节点一定是他们的最近公共祖先。如果两个节点值都要比当前节点值小,那么最近公共祖先应该在左子树里面,递归求解。类似的,如果都大与当前节点的值,那么最近公原创 2016-02-10 12:55:40 · 189 阅读 · 0 评论 -
328. Odd Even Linked List LeetCode
题意:将给定的链表分成2部分,一部分是从前往后把奇数下标的链表连起来,一部分是从前往后把偶数下标的链表连起来,然后最后把偶数下标的链表连接到奇数下标链表的最后。 题解:直接模拟呗。加两个虚拟链表头会好写一点。class Solution {public: ListNode* oddEvenList(ListNode* head) { ListNode* odd = ne原创 2016-02-10 13:04:12 · 213 阅读 · 0 评论 -
206. Reverse Linked List LeetCode
题意:翻转链表 题解:直接模拟,把后面链表不停的放到最前面。这里用一个虚拟头节点会很方便。class Solution {public: ListNode* reverseList(ListNode* head) { ListNode *pre = NULL; ListNode *cur = head; while(cur != NULL)原创 2016-02-10 13:06:27 · 189 阅读 · 0 评论 -
191. Number of 1 Bits LeetCode
题意:求解32位数在二进制表示下有几个1 题解:位运算。移位+按位与。class Solution {public: int hammingWeight(uint32_t n) { int ans = 0; while(n) { ans += (n & 1); n >>= 1;原创 2016-02-10 13:10:19 · 207 阅读 · 0 评论 -
70. Climbing Stairs LeetCode
题意:有n阶梯,你每次可以爬1阶梯或者2阶梯,问你爬n阶梯有多少种爬法。 题解:DP。dp[i] 表示爬到i阶梯的方法数。那么dp[i] = dp[i - 1] + dp[i - 2].class Solution {public: int climbStairs(int n) { map<int,int> m; m.clear(); m[原创 2016-02-10 13:13:31 · 204 阅读 · 0 评论 -
83. Remove Duplicates from Sorted List LeetCode
题意:给你一个排序好的链表,去掉重复的元素。 题解:直接模拟。class Solution {public: ListNode* deleteDuplicates(ListNode* head) { if(head == NULL) return NULL; ListNode *temp1 ,*temp2; temp1 = temp2 =原创 2016-02-10 13:19:24 · 188 阅读 · 0 评论 -
263. Ugly Number LeetCode
题意:给一个数字,判断它是不是Ugly Number。Ugly Number的定义是:只有2,3,5这三个因子构成。 题解:把2因子,3的因子,5的因子全都除掉。看剩下的数字是不是1.是的话就是Ugly Number,不然就不是。class Solution {public: bool isUgly(int num) { if(num <= 0) return false原创 2016-02-10 13:22:45 · 246 阅读 · 0 评论 -
202. Happy Number LeetCode
题意:给出一个数字,把每位拆开,然后每位数字平方相加得到新的数字,不停的重复这个操作,问最后能不能变成1。 题解:就是模拟这个过程,不过要用一个hash表来记录出现过的数,当某次操作出现了之前出现过的数字,那么肯定不能到达1了。class Solution {public: bool isHappy(int n) { unordered_map<int,bool> m;原创 2016-02-10 13:29:05 · 187 阅读 · 0 评论 -
326. Power of Three LeetCode
题意:判断一个数字是否是3的次方。 题解:对数取整判是否相等。class Solution {public: bool isPowerOfThree(int n) { int x = int(log10(n)/log10(3)); return x == log10(n) / log10(3); }};原创 2016-02-10 13:31:12 · 195 阅读 · 0 评论 -
231. Power of Two LeetCode
题意:给出一个数字,问是否是2的次方构成。 题解:不停的除以2,看最后是否等于1。class Solution {public: bool isPowerOfTwo(int n) { if(n <= 0) return false; while(n % 2 == 0) n /= 2; if(n == 1) return true;原创 2016-02-11 21:25:18 · 211 阅读 · 0 评论 -
21. Merge Two Sorted Lists LeetCode
题意:合并两个链表 题解:直接模拟即可。class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode *head = new ListNode(0); ListNode *temp = head; while(l1 != NULL原创 2016-02-11 21:26:57 · 182 阅读 · 0 评论 -
232. Implement Queue using Stacks LeetCode
题意:用stack来实现queue,要实现push,pop,peek,empty四个功能。 题解:1.push:用一个临时stack来暂存之前stack的值,然后之前的stack清空,加入新的元素,然后再把临时stack的元素加入之前的stack。2.pop:就直接弹出stack的顶。3.peek:直接返回stack的顶。 4.empty:直接返回stack是否为空。class Queue {原创 2016-02-11 21:31:45 · 212 阅读 · 0 评论 -
110. Balanced Binary Tree LeetCode
题意:给出一棵二叉树,判断是否是平衡二叉树。 题解:递归的判断,左子树的最大高度和右子树的最大高度的如果大于1,那么返回高度将为-1。否则为两者最大值+1.检查最后根返回的值是否是-1,是的话就说明不平衡,否则平衡。class Solution {public: int height(TreeNode* root) { if(root == NULL) retur原创 2016-02-11 21:42:34 · 187 阅读 · 0 评论 -
101. Symmetric Tree LeetCode
题意:判断给出的二叉树是否是镜面对称。 题解:递归判断左右子树是否对称。判断左子树的值和右子树的值是否相等,左子树的左左子树和右子树的右子树是否对称,左子树的右子树和右子树的左子树是否对称。class Solution {public: bool dfs(TreeNode* l,TreeNode* r) { if(!l || !r) return l == r;原创 2016-02-11 21:48:31 · 197 阅读 · 0 评论 -
198. House Robber LeetCode
题意:有N个房间,每个房间里面有的财宝价值nums[i],现在有一个小偷,他去这些房间里面偷东西,但是他不能偷相邻的两个房间,现在要求如何偷才能使得偷到的东西价值最多。 题解:dp,dp[i]代表偷到第i个房间时,能获取的最大价值。dp[i] = max(dp[i - 2] + nums[i],dp[i - 1]);class Solution {public: int rob(vect原创 2016-02-11 22:05:55 · 202 阅读 · 0 评论 -
107. Binary Tree Level Order Traversal II LeetCode
题意:二叉树的层序遍历。 题解:BFS即可。class Solution {public: vector<vector<int>> levelOrderBottom(TreeNode* root) { queue<TreeNode*> q; vector<vector<int>> ans; while(!q.empty()) q.pop()原创 2016-02-11 22:23:59 · 173 阅读 · 0 评论 -
27. Remove Element LeetCode
题意:给出一个数组和一个元素,要求把数组中与该元素相等的值去掉,返回新的数组长度,不理会数组长度之后数组的储存情况。 题解:用len来作为新数组的下标,当num[i] !=val,那么让num[len] = num[i],len++,最后返回len即可。class Solution {public: int removeElement(vector<int>& nums, int val原创 2016-02-11 22:28:07 · 170 阅读 · 0 评论 -
26. Remove Duplicates from Sorted Array LeetCode
题意:给一个排序好的数组,要求去掉重复的元素,返回长度。 题解:直接用STL的unique去重。class Solution {public: int removeDuplicates(vector<int>& nums) { return unique(nums.begin(),nums.end()) - nums.begin(); }};原创 2016-02-11 22:30:52 · 177 阅读 · 0 评论 -
66. Plus One LeetCode
题意:模拟大数加法,给出一个大正整数,要求返回加一之后的大正整数。 题解:字符串从后往前模拟加法即可,需要注意的是最后可能字符串需要加长,比如999 + 1这种。class Solution {public: vector<int> plusOne(vector<int>& digits) { int len = digits.size(); int le原创 2016-02-11 22:35:01 · 205 阅读 · 0 评论 -
118. Pascal's Triangle LeetCode
题意:给出n,求出n层的杨辉三角。 题解:ans[i][j] = ans[i - 1][j - 1] + ans[i - 1][j](j != 0 && j != i).class Solution {public: vector<vector<int> > generate(int numRows) { vector<vector<int> >ans;原创 2016-02-11 22:38:36 · 204 阅读 · 0 评论 -
172. Factorial Trailing Zeroes LeetCode
题意:求n阶乘后有多少个连续的0. 题解:能出现0必然是因为2 * 5 = 10,然而1到n中出现因子2的次数显然要大于等于因子5出现的概率,因此我们只需要统计出现了多少个因子5就可以。5的话就出现在5,10,15…里面。5-20里面只有1个5,25之后的都有两个5.因此我们每次用n除以5就可以得到包含1个因子5的数的个数,然后除以5,把只包含1个因子5的数字去掉。重复这个过程。就能求出因子5的所原创 2016-02-11 22:45:23 · 174 阅读 · 0 评论 -
102. Binary Tree Level Order Traversal LeetCode
题意:二叉树的层序遍历 题解:BFS即可。class Solution {public: vector<vector<int>> levelOrder(TreeNode* root) { queue<TreeNode*> q; vector<vector<int>> ans; while(!q.empty()) q.pop();原创 2016-02-11 22:46:28 · 182 阅读 · 0 评论 -
119. Pascal's Triangle II LeetCode
题意:给出n,求杨辉三角第n行。 题解:杨辉三角的本质是组合数。即求Cn1…Cnn.class Solution {public: vector<int> getRow(int rowIndex) { vector<int> v; v.push_back(1); long long t = 1; for(int i = 1;原创 2016-02-11 22:50:43 · 220 阅读 · 0 评论 -
112. Path Sum LeetCode
题意:给一棵二叉树和一个sum,问是否存在一条从根到叶子的路径,把经过的节点的数字加和等于sum。 题解:递归求解,左儿子不空,那么递归判断左子树是否存在路径使得加和等于sum - root->val。右儿子不空,那么递归判断右子树是否存在路径使得加和等于sum - root->val.class Solution {public: bool hasPathSum(TreeNode* r原创 2016-02-11 23:02:10 · 220 阅读 · 0 评论 -
9. Palindrome Number LeetCode
题意:判断一个数字是不是回文数。 题解:构造一个数字,等于要判断数字从右到左的顺序。比如12345,构造出54321.然后判断两个数字是否相等。class Solution {public: bool isPalindrome(int x) { if(x < 0) return false; int temp = x; int y = 0;原创 2016-02-11 23:04:39 · 190 阅读 · 0 评论 -
225. Implement Stack using Queues LeetCode
题意:用queue来实现stack,包括push,pop,top,empty。 题解:push:用一个临时queue来存原始的queue,清空原始的queue,然后加入新元素,然后把临时queue的元素加入。pop:直接pop掉queue的第一个元素。top:直接返回queue的第一个元素。empty:直接返回queue的empty。class Stack {public: queue<原创 2016-02-11 23:09:13 · 205 阅读 · 0 评论 -
111. Minimum Depth of Binary Tree LeetCode
题意:求二叉树的最小深度。 题解:递归求解。最小深度等于1 + 左子树的最小深度 和 右子树的最小深度的最小值。class Solution {public: int minDepth(TreeNode* root) { if(root == NULL) return 0; if(root->left == NULL && root->right == NUL原创 2016-02-11 23:10:56 · 181 阅读 · 0 评论 -
88. Merge Sorted Array LeetCode
题意:给出两个排好序的数组,让你合并到第一个数组里面。 题解:从后往前合并,把大的数字放到第一个数组的后面。class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { while(n) { if(!m || nu原创 2016-02-11 23:30:08 · 186 阅读 · 0 评论 -
36. Valid Sudoku LeetCode
题意:给出一个数独,让你判断当前状态是否合法。 题解:判断是否合法,有3个规则,1.每行不能出现相同数字。2.没列不能出现相同数字。3.每个9宫格不能出现相同数字。class Solution {public: bool check(vector<vector<char>>& board,int r,int c) { bool vis[11]; m原创 2016-02-11 23:34:04 · 174 阅读 · 0 评论