
leetcode
文章平均质量分 58
NearXDU
西电三系小硕,互联网爱好者。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leetcode9
Palindrome Number回文数,并且题目要求不能使用额外的空间。即,不能使用回文串的方法。虽然这样,这道题依然不是很难,即对每个数字,从个位起不断乘10,最后再拿结果与原数比较。唯一需要注意的是,在本题中,负数不作为回文数考虑范围之内,但是输入依然可能为负,此时直接返回false即可。代码:class Solution {public: bool isP原创 2015-09-26 14:43:05 · 1578 阅读 · 0 评论 -
leetcode7
Reverse Integer非常简单的题,难点在于溢出问题。就是这个溢出问题真是折腾死我了。。。首先确定两个宏INT_MAX 和 INT_MIN 来表示int型所表示的最大和最小。当然,网上有大神自己定义了(基础知识真是太弱渣了)原创 2015-09-24 23:28:26 · 1146 阅读 · 0 评论 -
leetcode8
String to Integer (atoi)本来以为是简单的字符转整型,提交的时候的问题很多。其实是参照标准库atoi函数:比如说空串,空格,字母,+号和-号,考虑溢出。至于溢出,在之前的题目中,说到,用long long int 保存数据后再用INT_MAX和INT_MIN来判断,在此需要考虑正负号问题。最后舍去尾部无效字符:例如当 input 为“12a11”e原创 2015-09-25 22:56:44 · 871 阅读 · 0 评论 -
leetcode12
Integer to Roman这几天时间比较碎片化,题目都是跳着做的,慢慢会把前面没做的补上。关于这个题。花了一点时间研究了一下罗马数字的规律。结合这个题目的思路:1、首先将输入的数字的每一位的值取出来。2、从千位开始,依次对结果字符串累加。注:从罗马字符的规律来看,我把其分为1~3,4,5~8,9这几个段位。分别对每一位进行这几个段位规律进行处理,这种方法代原创 2015-09-29 11:48:54 · 891 阅读 · 0 评论 -
leetcode224
Basic Calculator折腾了好一会儿,其实意思很简单。就是实现一个包含+,-法和括号运算的计算器。可能是没找对方法吧,看了网上的代码量,感觉我写的就是一坨屎啊。。。参考:http://blog.youkuaiyun.com/xudli/article/details/46554835每次压栈都是当前的结果,这样计算量会小很多。不过比较起来大神的代码比较简单,我的思路还是比较清晰的。我原创 2015-09-29 22:01:23 · 789 阅读 · 0 评论 -
leetcode14
Longest Common Prefix也是看题目类似,就跳着做题。题目就是在以string组成的数组中找这些string的最长前缀。我的思路:1、第一步先对容器排序,求得数组中最长串的长度。2、以数组的中元素串第一位开始进行比对,对数组索引进行迭代,来比较数组串中每一个元素串从第一位开始的每一位。3、如果相等将字符添加到result串中,一旦不相等,立刻break;原创 2015-09-29 23:15:54 · 1623 阅读 · 0 评论 -
LeetCode40——Combination Sum II
LeetCode40——Combination Sum II与上一题Combination Sum类似,只不过是有放回的取。这题最关键的就是去重。所谓去重,不是删除序列中重复的元素,而是当序列中出现相同的数时,会递归产生相同的结果。例如:序列排序后为1 1 2 3 4假如target为3,不去重的话就会产生两个[1,2],分别由索引为0和索引为1的1和2组合产生。在原创 2015-10-17 21:29:18 · 737 阅读 · 0 评论 -
leetcode 11
Container With Most Water一直陷入一个误区就是:以为是求最大面积,所以一直以梯形面积去计算,这困扰了我很久。实际上跟短板原理一样,题目要求装最多的水,那么只需要求以短边为长,x坐标差为宽的矩形面积的最小值即可。实测两重循环超时,在此就不贴出代码了。此处用贪心算法解决。即,两个指针分别在两头向中间移动。(i,hi) (j,hj),两个点中,h较小的移动原创 2015-09-29 11:39:11 · 1437 阅读 · 0 评论 -
LeetCode36——Valid Sudoku
LeetCode36——Valid Sudoku题意:判断数独是否符合,也就是每行,每列,每个3X3的九宫格。比起下一题完成数独,判断起来就简单多了:思路就是,按行,按列,按3X3的九宫格分别判断,最后的结果是三者的与的结果,这样写起来代码量比较多但是思路还是比较清晰的。代码:class Solution {private: bool ValidRow(ve原创 2015-10-16 20:18:45 · 529 阅读 · 0 评论 -
LeetCode38——Count and Say
LeetCode38——Count and Say上一题对我来说实在太凶残了,所以我还是缓缓先做38题好了。。。题意:可以理解为求一个数组的第n项,而这个数组的通项公式可以这样理解:第1项:1第2项:11第3项:21第4项:1211第5项:111221第6项:312211......第n项:第n-1项的数字串从左到右读出来。原创 2015-10-16 20:27:42 · 4429 阅读 · 0 评论 -
LeetCode39——Combination Sum
LeetCode39——Combination Sum题意:打个比方,现在盒子里面有小球,球上有数字,现在给定一个target,要求有放回的从盒子里面取小球,要求数字加起来为target的,把所有加起来为target的组合返回。这道题的关键就在于数字可以重复取,也就是上述有放回(区别于LeetCode40——Combination Sum II)。分别以序列中的每一个数字为原创 2015-10-17 21:08:58 · 1532 阅读 · 0 评论 -
leetcode287
目前最新的题目吧。Find the Duplicate Number官方给的难度是hard,但感觉其实通过挺简单的。这道题目的意思是在n+1大小的数组中有n个数范围在1~n要求找出相同的一个数。限制比较多:1.不能修改数组2.时间复杂度要求3.不能有多余空间直到写这篇博客前,才注意原来不能修改数组,不过我先排序,再在有序数组中找到重复数字的代码居然通原创 2015-09-29 21:45:30 · 1673 阅读 · 0 评论 -
leetcode13
Roman to Integer国庆假期前的最后一篇博客,兑现自己的诺言,跳过的题目把它补上。跟之前的Integer to Roman类似。仔细观察罗马数字的规律实际上核心在于:小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,反之相减。仔细研究这句话:并且记住罗马数字的特殊字符:本题中:I 1V 5X原创 2015-09-30 22:08:42 · 1929 阅读 · 0 评论 -
leetcode1
前言:研一了,提前刷刷leetcode,为以后找工作打基础。题意:在数组中找出两个数相加为target,并返回这两个数的索引要求:1.索引小的在前2.找出一组即可思路1,最早想到的肯定是2重循环搜索,提交后超时,这里也贴出代码:class Solution{public: Solution(){} vector twoSum(vector& n原创 2015-09-16 11:06:54 · 824 阅读 · 0 评论 -
LeetCode41——First Missing Positive
LeetCode41——First Missing Positive题意:在序列中找到第一个没有出现的正整数。我的方法比较笨,后来提交过后通过的确时间效率非常低。首先,排序、去重。然后对这个有序序列进行迭代:找到正整数开始的索引i,从这个索引开始,该序列的数后面应该是按 1 2 3 4 5 6 7...这样的顺序来排列。所以对于从索引i开始的每一个元素nums[原创 2015-10-19 22:12:15 · 552 阅读 · 0 评论 -
LeetCode42——Trapping Rain Water
LeetCode42——Trapping Rain Water题意:看图就很明显。但是做起来就没想象的简单了。。。我最初的疑惑:如果序列是这种情况01010,也就是说“凹点”两边都是“凸点”这样就简单了,直接根据短板原理可求,遍历求出索引为i-1和i+1的value的最小值即可。。。但是如果遇到这种情况21012,也就是中间0的凹点,两边的壁呈递增,就懵逼了。。。原创 2015-10-19 22:36:02 · 1935 阅读 · 0 评论 -
LeetCode43——Multiply Strings
LeetCode43——Multiply Strings题意:做乘法,两个乘数都是string类型的。直接string转整型是不行的,因为大数相乘可能溢出。之前做过类似的大数乘法。其思路就是模拟人自己在草稿上计算乘法的步骤,按位把每一个求出来,注意进位和取模就OK代码:class Solution {public: string multiply(string num1原创 2015-10-20 22:36:04 · 650 阅读 · 0 评论 -
leetcode15
国庆假期也玩也coding,再不写博客,之前没写注释的代码可能都忘了。。。以后要开始写写注释。LeetCode15-3Sum这道题目出出来就知道暴力搜索肯定是超时的,虽然这样依然抱着侥幸心理试了试,确实超时了,就不贴代码了。当然考虑Two Sum用map空间来换取时间的方法,我还是尝试了一下。由于是三个数,很有可能要考虑重复的问题,我在代码中使用如下方式来去重:if(find(原创 2015-10-06 21:16:26 · 1650 阅读 · 1 评论 -
leetcode17
LeetCode---Letter Combinations of a Phone Number这道题目需要明确的就是,当参数string digits的长度为K时,最终子串的长度就是K,这是递归调用的返回条件简单说明一下题意:就是手机的九宫格输入法中,数字对应了不同的字母串在代码中,我用Map来表示这种对应关系:mapmyMap;myMap['2']="abc";myMa原创 2015-10-06 22:04:35 · 1732 阅读 · 0 评论 -
leetcode18
LeetCode18-----------4Sum没啥好说的,跟3Sum类似,代码也很类似,思路就是先固定两个数,再对另外两个数夹逼。只要记得去重就好。代码:bool cmp(const int&a ,const int&b){ return a < b;}class Solution {public: vector > fourSum(vector& nums, i原创 2015-10-06 22:12:35 · 1459 阅读 · 0 评论 -
leetcode19
LeetCode19 --------Remove Nth Node From End of List链表操作。我的思路是:1.先计算出链表的长度len,再根据其求出要删除的元素的正序。2.考虑头结点的操作。代码:class Solution {public: ListNode* removeNthFromEnd(ListNode* head, int n) {原创 2015-10-06 22:16:09 · 963 阅读 · 0 评论 -
LeetCode295——Find Median from Data Stream
LeetCode295——Find Median from Data Stream前提是Ordered List。但是插入即addNum操作可能是无序的。尝试过对序列排序再返回的办法结果是超时的。想想还是天真,代码:class MedianFinder {private: vectornums;public: // Adds a number into the data原创 2015-10-20 23:00:08 · 1332 阅读 · 0 评论 -
leetcode20
LeetCode20 --------Valid Parentheses传统的括号匹配问题,考虑左括号和右括号,遇到左括号压栈,遇到右括号与栈顶元素比较。这里我用一个Map来保存左右括号的对应关系以便在栈顶元素中进行比较。代码:class Solution {public: bool isValid(string s) { stack brackets; mapmyMa原创 2015-10-06 22:19:05 · 909 阅读 · 0 评论 -
leetcode23
LeetCode23----------Merge K Sorted Lists这道理暴力搜索两两合并排序肯定超时的,这个我试过。。。题目给的Tag是分治法,我就用分治法来解决的,对整个lists递归两两合并,最后return在网上看到有用堆的方法解决,这个没有仔细研究,等哪天研究了再更新。在这里复用了之前两两合并的代码:class Solution {private: L原创 2015-10-06 22:40:34 · 668 阅读 · 0 评论 -
leetcode24
LeetCode24 ---------Swap Nodes in Pairs简单来说就是将链表节点两两呼唤,但是是不重复的。主要是链表的操作,比较简单,注意头结点就好。代码:class Solution {private: void mySwap(ListNode *p,ListNode*r) { if (p->next==NULL||r->next == NULL)原创 2015-10-06 22:42:43 · 653 阅读 · 0 评论 -
leetcode21
LeetCode21 ----------Merge Two Sorted Lists将两个有序链表合并成一个有序链表。这是当初学数据结构时一个非常重要的链表操作了。思路很简单。首先如果其中一个为空,返回另一个。分别比较两个链表的元素,分为三种情况:前两种分别是,将指针1向右移动或将指针2向右移动。当两值相等时,要同时插入两个元素,并同时移动两个指针。最后:当某原创 2015-10-06 22:25:37 · 1711 阅读 · 0 评论 -
leetcode16
LeetCode16----------3Sum Closed意思是求三数相加最接近target的一个结果,也就是加起来与target相减绝对值最小的。这次是要求返回三数之和,而不是这个三个数组成的三元组。最开始想到的就是套用上一题的思路。不过试了试三重循环直接就过了,也就算了,后来网上查了一下,有用15题相似代码解决的。代码:class Solution {public:原创 2015-10-06 21:23:25 · 764 阅读 · 0 评论 -
leetcode22
LeetCode22-----------Generate Parentheses生成匹配的括号,括号数由输入给出。这个题目想了很久,后来在草稿上画个图就懂了。假设现在有两个容器分别放了左括号和右括号。初始状态,左括号的数目=右括号的数目=输入int n我们从容器中取括号放置的时候,必须满足一个条件:容器中剩余左括号的数目要始终小于等于容器中右括号的数目。网上有一个写的原创 2015-10-06 22:34:53 · 1975 阅读 · 0 评论 -
leetcode29
leetcode29------------Divide Two Integers题目的意思是两数除法,但不使用乘法,除法,取模等运算符来做。回想除法的最朴素思想:即,当 被除数>除数 一直拿被除数减去除数,能减去除数的次数为两数相除的结果。根据这个思想,我们很容易写出伪代码:while(被除数>除数)被除数 -= 除数count ++最终的count为我原创 2015-10-08 22:33:57 · 1673 阅读 · 0 评论 -
LeetCode49——Group Anagrams
LeetCode49——Group Anagrams题意:给定一组string,将这些string分类,同一类string满足如下条件:1.在同类内部,按照字典序排列。2.不同类的string所包含的字母不一样。那么思路就是,首先区分,然后排序。要做到区分很简单,首先对于不同类来说,他们包含的字母肯定不一样,那么将每个string进行排序(sort方法即可),就实现原创 2015-10-23 09:43:58 · 1180 阅读 · 0 评论 -
LeetCode48——Rotate Image
LeetCode48——Rotate Image将二维矩阵向右旋转90度。例如[a00 a01 a02 ; a10 a11 a12 ; a20 a21 a22]变成:[a20 a10 a00 ; a21 a11 a01 ; a22 a12 a02]简单分析一下就是:第n列变成了第n行,并且每一列内部顺序颠倒过来。一开始想着怎么交换元素。后来发原创 2015-10-23 09:30:21 · 584 阅读 · 0 评论 -
LeetCode45——Jump Game II
LeetCode45——Jump Game II题意:在一串序列中,每个索引对应的value表示你能跳的最大步数。你在任何索引处可以跳[1,value]步,求跳到终点处的最小次数。这题贪心就在于,假设在每个序列处我们都跳它的最大步数。这里维护两个索引,一个是当前位置curIndex,一个是下一个最大位置nextIndex现在假设有序列[2,3,1,1,4]原创 2015-10-23 09:17:14 · 663 阅读 · 0 评论 -
LeetCode50——Pow(x,n)
LeetCode50——Pow(x,n)题意:实现 math.h里面的pow函数。好代码如下:class Solution {public: double myPow(double x, int n) { return pow(x,(double)n); }};好的此题完结-----------------------------------------------原创 2015-10-23 09:52:17 · 1034 阅读 · 0 评论 -
leetcode290
LeetCode290----------Word Pattern一个map是没办法搞定的,这是我一开始的思路,用一个map来保存char到string的映射,但是通过leetcode的Custom Testcase和单步调试就很容易得到该办法不行的结论。于是。。。这道题的关键就在于。。。。两个map:一个map用于保存StringToChar的对应关系一个map用于保存C原创 2015-10-08 21:32:04 · 1007 阅读 · 0 评论 -
LeetCode47——Permutations II
LeetCode47——Permutations II含重复元素的全排列,仍然是套用了下一个全排列的方法。跟上题一样,有时间补上递归解法。代码:class Solution {private: void Swap(int &a, int &b) { int temp = a; a = b; b = temp; } bool Permutation(vector原创 2015-10-23 09:23:56 · 1238 阅读 · 0 评论 -
LeetCode46——Permutations
LeetCode46——Permutations求全排列,这题偷了个懒,借用了之前求下一个全排列的代码。之前看到过递归的方法,包含重复元素,和不包含重复元素的方法,有时间会补上。代码:class Solution {private: void Swap(int &a, int &b) { int temp = a; a = b; b = temp; } boo原创 2015-10-23 09:21:31 · 1677 阅读 · 0 评论 -
leetcode28
leetcode28--------------Implement strStr()讲道理的话,还是用KMP,但是偷懒用了string的find方法KMP模式匹配早已年久失修,等过段时间复习一下KMP再过来补充。。。先上一个比较水的代码吧。class Solution {public: int strStr(string haystack, string needle)原创 2015-10-09 16:09:22 · 759 阅读 · 0 评论 -
LeetCode58——Length of Last Word
LeetCode58——Length of Last Word求出最后最后一个单词的长度。提供两种方案。方案1:把子串按word保存在vector里面,这样求出vector最后一个元素的长度就可以了。代码:class Solution {public: int lengthOfLastWord(string s) { auto it = s.begin(); w原创 2015-10-24 22:09:08 · 993 阅读 · 0 评论 -
LeetCode61——Rotate List
LeetCode61——Rotate List简单的链表操作。维护head和r指针,r初始指向链表末尾,并且r-next=head;首尾相接,再根据给定K移动特定指针。比如说,链表长度len=5,那么当k为1时,head指针向后移动len-k=4步,而r指针也移动同样步骤,这样始终有r->next==head;最后将循环链表拆开为单链表即可。注:根据提交经验,k会给很大原创 2015-10-24 22:48:35 · 1159 阅读 · 0 评论 -
leetcode2
CCCV大会志愿者三天,代码是来之前通过的。比较简单,链表相加考虑进位。动态分配单链表操作有一些遗忘,做题之前看了一下链表基本操作(参考http://c.biancheng.net/cpp/html/2672.html)在本题中复杂的操作没有,主要是创建链表和在尾部插入链表。代码如下:#includeusing namespace std;// Definition fo原创 2015-09-20 21:54:23 · 1083 阅读 · 0 评论