LeetCode
_Greenday_
我的个人网站:http://wgliang.github.com
展开
-
leetcode:Binary Tree Right Side View
一、 题目 给你一个二叉树,假设几就站在树的后边,那么此时你就只能看到最右边的节点了。例如: 1 / \ 2 3 \ \ 5 4 返回值就是[1,3,4]二、 分析 对于树的遍历,我们通常会使用DFS或BFS,这个题目其实同样是遍历,不过呢,我们只记录下来原创 2015-04-20 23:27:47 · 1077 阅读 · 0 评论 -
leetcode:Pow(x, n)
一、 题目题目说的很清楚,就是实现pow()函数。二、 分析看到题目后,首先想到一个个算,心想应该会超时,果不其然。想到了二分法,这样减少了不少的运算。没有什么难度的思路。虽然思路是二分,但是又有不同的实现形式。下面使用三种》while实现: class Solution {public: double pow(double x, int n) {原创 2015-02-08 17:46:02 · 771 阅读 · 0 评论 -
leetcode:String to Integer (atoi)
一、 题目题目目的很明显,就是将一个字符串转换成整数,也就是平时经常用到的atoi.二、 分析题目其实不难,不过需要注意下面几点:1、字符串前的空白2. 字符串所表示数值的正负号3. 结束条件,遇到非数字或者字符'\0'结束4. 考虑溢出,与int值所能表示的最大(0x7fffffff)和最小值进行比较5. 考虑异常输入情况下,用全局变量valid来原创 2014-12-30 23:59:51 · 962 阅读 · 0 评论 -
Count and Say
一、 题目题目说,如下的字符串:1, 11, 21, 1211, 111221, ...1读成11(一个1)11读成21(两个1)21读成(一个2一个1)......给一个整数,返回对应得语句。返回语句为一个字符串二、 分析题目的意思不是很明白,其实就是说第i+1个字符串是第i个字符串的读法,第一字符串为 “1”比如第四个字符串是1211,它的读法是 1个1原创 2015-02-05 20:04:35 · 800 阅读 · 0 评论 -
leetcode:First Missing Positive
一、 题目给出一个未排序的数组,找出第一个丢失的正整数,例如:给出[1,2,0] 返回3 给出[3,4,-1,1] 返回2注:算法是O(n)的时间和常量的空间二、 分析一开始,我理解错误,以为是找出第一个右边比左边小的数,后来发现我想的太简单了,题目的难点在它的要求,即时空要求。我们不能使用一般的排序或重新开辟数组,所以我们只有使用数组本身,即建立数与索引的关系:A[n原创 2015-02-05 13:13:08 · 700 阅读 · 0 评论 -
leetcode:Palindrome Number
一、 题目试确定一个整数是否为回文数。并不使用额外的空间。提示:负整数可能是回文数吗?(例如 -1)如果你想要将整数转换成字符串,那么你注意到不能使用额外的空间的限制。可能你尝试翻转整数,但是,如果你已经解决这个问题“逆向整型”,你要知道,颠倒整数可能会溢出的情况。那么你会如何处理这样的情况呢?要有解决这个问题的一种更通用的方法。二、 分析了解题目的意思后,其实问题原创 2015-02-06 14:39:02 · 901 阅读 · 0 评论 -
leetcode:Valid Palindrome
一、 题目题目给出一个字符串,求出它是否为回文字符串,其中只有字母和数字是有效字符,其他的字符可以忽略。例如:"Aman, a plan, a canal: Panama" 是回文字符串."race a car" is not a palindrome.不是回文字符串二、 分析看到这个题目我首先想到的是使用两个数组将有效字符串保存,其中一个正序一个逆序,然后做比原创 2014-12-26 20:55:25 · 877 阅读 · 0 评论 -
leetcode:Decode Ways
一、 题目给定一个字符串包含26个字母,字母与数字产生映射,如:‘A’ --> 1‘B’ --> 2…‘Z’ --> 26如果给一串数字,请给出编码的方式有多少? *注意:’12’ 可以编码成”AB”,也可以编码成”L”.二、 分析可以看出题目的目的是考察动态规划,即每走一步可能有两种情况,是不是和爬台阶很像呢?对的。这道题思路有两种但原创 2014-12-26 19:38:58 · 772 阅读 · 0 评论 -
leetcode:Triangle
如图,在一个三角形二维数组中有一系列数,求出从顶层到底层最小和的路径。原创 2014-12-10 22:11:39 · 852 阅读 · 0 评论 -
leetcode:Remove Nth Node From End of List
一、 题目给定一个单链表,删除倒数第n个节点,返回删除了的链表。例如: 已知: 1->2->3->4->5, n = 2.处理后:1->2->3->5. 试着遍历一次完成。二、 分析看到这道题我第一感觉就是双指针,因为要删除倒数第n个数,所以两个指针的间距也就是这个n,当右边的指针到达末尾处时,那么左指针的下一个指针就是要删除的节点。其实会有下面原创 2015-01-14 08:32:57 · 782 阅读 · 0 评论 -
leetcode:Unique Paths
题目是这样的,给定一个m*n的矩形方格,每次走一格,并且只能向右和向下走,求从左上角到右下角的路径数。扩展问题:如果在方格中写入0和1,其中1代表障碍,也就是不能通过此方格,求其路径数。原创 2014-12-09 23:36:56 · 789 阅读 · 0 评论 -
Edit Distance
这道题是求一个字符串编辑成为另一个字符串的最少操作数,只有三种操作包括添加,删除或者替换一个字符。原创 2014-12-19 21:09:41 · 714 阅读 · 0 评论 -
leetcode:Roman to Integer
将罗马数字转换成整型数字。前面已经介绍过罗马数字了这里就不赘述了。原创 2014-11-29 23:10:05 · 779 阅读 · 0 评论 -
leetcode:Generate Parentheses
1、 题目 给定一个数n,求出n对合法的括号.例如n = 3 ((())) , (())() , ()()() , ()(()), (()())2、 分析 本题其实是卡特兰数,如果问的是有多少对,则直接利用卡特兰公式可以直接求出,但是该题要求求出所有的匹配情况. 一般来说是用递归的方法,因为可以归结为子问题原创 2014-11-29 11:24:07 · 618 阅读 · 0 评论 -
leetcode:3Sum
一、 题目给出一个数组S包含n个整数,找出不重复的三个元素a、b、c使a+b+c=0。例如给出S = {-10 1 2 -1 -4},解果是: (-1, 0, 1) (-1, -1, 2)二、 分析首先我们看到这个题目会想到Brute-Force(简单的模式匹配)直接使用三重循环来匹配所有元素组合找出结果。虽然我在每一层循环都做了优化来减少一原创 2015-01-02 00:22:31 · 1068 阅读 · 0 评论 -
leetcode:Search Insert Position
一、 题目在一个数组中查询一个目标数,给出的是一个有序的数组、元素个数和目标数,不过特别的是这个数组可能是旋转(rotate)的。例如:数组可能是 0、1、2、4、5、6 也可能是4、5、6、0、1、2二、 分析这个题首先我们会想到二分查找,但是仔细想想好像又不是,因为不一定是正序的,还有可能旋转,因为rotate的原因,如果我们取一半的时候原创 2015-01-03 22:06:42 · 859 阅读 · 0 评论 -
leetcode:Divide Two Integers
一、 题目不使用乘法、除法、求余运算实现除法运算,除数和被除数、结果都是用int型。如果溢出就返回MAX_INT。二、 分析看到题目后我立马想到了计算机组成原理中的一位除法和二位除法,不过想想在这里实现起来又是太麻烦了。那就先试试暴力法吧,被除数 - 除数 = ???一直减减减直到小于等于0,想想自己都觉得超时。。。如下,果然超时 class Solution {publ原创 2015-02-10 11:09:10 · 761 阅读 · 0 评论 -
leetcode:Bitwise AND of Numbers Range
一、 题目给出一个范围,这个范围在0--2147483647,返回在这一个范围的所有整数的与操作值。这个范围包括两个边界。例如:给出[5,7] 返回的是4二、 分析或许我们最能轻易想到的是使用暴力解法,即将范围中的数依次与操作,但是这样势必会超时。那么该如何做呢?我们做与操作其实是在将这些数二进制中相同位置不同值的去掉,留下相同的,在《编程之美》中有一个求一个数中1的个数的题目,在原创 2015-04-21 00:07:54 · 1094 阅读 · 0 评论 -
leetcode:Reverse Words in a String
一、 题目给出一个字符串,以单词为单位反转字符串。例如 i am echo返回 echo am i二、 分析仔细分析会发现,对于中间结果我们需要保存,即我们得保证以单词为单位。另外我们需要考虑到下面的情况1、中间有多个空格的处理2、没有空格的字符串3、反转后开头和结尾不能有空格4、最后的结果单词间得有空格所以,由以上我们有两种思路,一种就是以单词为单位反转,原创 2015-03-23 23:27:06 · 1040 阅读 · 0 评论 -
leetcode:Rotate List
一、 题目给出一个链表,将右边k个节点移到前面。例如:1->2->3->4->5->NULL,k = 2时返回 4->5->1->2->3->NULL二、 分析之前我们遇到过将字符右移或左移的,当时的思路是将前一部分反转,后一部分反转,整体再反转,即可得到结果。不过这道题我们需要换一种思路,其实对于这种链表的问题,我们可以总结出,链表的反转都可以直接从某一个位置开始截断即原创 2015-03-23 23:16:05 · 1058 阅读 · 0 评论 -
Valid Sudoku
一、 题目数独游戏,每一行,每一列,每一个小方格中含有数字1-9且不重复,不要求数字全部出现,可以用’.’代替。判断给出方格的是否符合要求。二、 分析第一次玩这个游戏,不知道规则,搜之,原来就是要遍历判断,那就查询每一行,每一列,每一个方格啦!主要的技巧是在判断方格时,可以使用一个四重for循环,优化后使用一个三重循环。class Solution {public: bo原创 2015-02-16 16:00:56 · 865 阅读 · 0 评论 -
leetcode:Search for a Range
一、 题目给出一个已经排好序的数组和一个数字,找出在这个数字在数组中的范围。例如:[5,7,7,8,8,10]和8返回:[3,4]二、 分析题目很基础,就是找出等值的数字的开始和结束索引,上去就遍历当第一次遇到等值时记录下左索引,最后一次遇到记录下右索引也不会超时。如下://遍历法class Solution {public: vector searchRang原创 2015-02-16 13:02:47 · 832 阅读 · 0 评论 -
leetcode:Sum Root to Leaf Numbers
一、 题目给一个二叉树,其中节点只可能是数字0-9,每一条路径组成一个数。如下: 1 / \ 2 3左边路径1->2 代表 12.右边路径1->3 代表 13. sum = 12 + 13 = 25.二、 分析想起了一句话,树的问题可归结为递归问题,这道题也一样,每次经过一个节点会遇到三中情况:1、不包含左/右节点;原创 2015-02-26 17:07:34 · 779 阅读 · 0 评论 -
leetcode:Next Permutation
一、 题目 这道题给出一个数列,求大于这个数列的最小数列。例如:1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1二、 分析喜欢使用C++的童鞋或许会马上想到next_permutation()这个库函数,没错,其实这道题就是实现的它(严格说来只是初步实现),如果可以的话,如果直接输入这一行代码就可通过: void原创 2015-01-25 00:25:52 · 1130 阅读 · 0 评论 -
leetcode:Excel Sheet Column Number
一、 题目给定一个出现在Excel表格中的列标题,返回其对应的列号。例如: A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 二、 分析题目说的很清楚,其实仔细分析下很简单的,就是将一个字符串转化为整型数(atoi())的变形---以26为基数,而且原创 2015-02-10 22:56:45 · 862 阅读 · 0 评论 -
Longest Common Prefix
一、 题目一个vector中包含若干个字符串,求出这些字符串的最大前缀。二、 分析一开始我还以为是最长公共子序列呢!后来发现是前缀...我能想到的是只有一个个比较一个个添加了,不知道还有没有更好的办法!class Solution {public: string longestCommonPrefix(vector &strs) { string res;原创 2015-02-10 23:34:58 · 771 阅读 · 1 评论 -
leetcode:Find Peak Element
一、 题目峰值元素的定义是比邻居元素都大的元素。给定一个数组,其中array[n] != array[n + 1],找出峰值元素并返回它的索引。但是其中可能含有多个峰值,不过返回其中的一个就可以了,可以假设num[-1] = num[n] = 负无穷大。例如,[1,2,3,1],3就是峰值,返回索引2。二、 分析方法一:暴力,其实这个方法还可以吧,如果是一般的对称情况,例如原创 2015-02-26 18:21:12 · 850 阅读 · 0 评论 -
leetcode:Majority Element
一、 题目给出一个大小为n的数组,找出主元素,主元素是出现次数大于n/2的数。假设数组不为空,主元素一定存在。二、 分析这道题在面试中很容易见到,找出出现次数大于全体个数一半的数。思路是只需要设置一个计数器,只有它为0时才改变主元素的值,如果出现等于主元素的数则加1,否则减1。即如果有该数那么一定会找出主元素。 class Solution {public: int原创 2015-02-17 20:21:40 · 752 阅读 · 0 评论 -
leetcode:Combination Sum
一、 题目给一个集合和目标数,其中没有重复的数,其中的某些数的和为目标数,同一个数使用的次数没有限制。注:所有的数(包括目标数)都是正的结果必须是有序的结果中没有重复的二、 分析根据题目,第一次写的代码感觉没什么问题了,谁知道出现错误,原因是没有处理同一个数使用多次的情况,再看看自己的代码,顿时无望,果断删了重写。那么怎样处理这种情况呢?................原创 2015-02-17 19:21:29 · 851 阅读 · 0 评论 -
leetcode:Length of Last Word
一、 题目给定一个字符串s由大/小写字母和空的空间字符' ',返回字符串的最后一个单词的长度。如果最后一个单词不存在,则返回0。注:一个单词被定义为一个不带空格的字符序列。例如,给出s =“Hello World”,返回5。二、 分析没有什么复杂的算法,按照规则考虑所有情况就行,有下面的几种情况:1、“ ”2、“abc”3、“ abc”4、“原创 2015-02-19 09:38:52 · 985 阅读 · 0 评论 -
leetcode:Plus One
用数组保存的大数,每一个元素代表数的一位,将该数加1,求改变后的大小。原创 2014-11-30 00:26:15 · 1102 阅读 · 0 评论 -
leetcode:Sort Colors
给一个数组包含n个物体,有蓝色、红色和白色三种颜色,把他们分类并按照红、白、蓝的顺序排列,我们用0、1、2来表示红白蓝的颜色注解:很容易想到遍历两遍数组得到三个数的数目,再覆盖,但是请只遍历一遍数组来解决。原创 2014-11-23 00:42:04 · 1261 阅读 · 0 评论 -
leetcode:Container With Most Water
给定一系列整数代表在0,1,2,3...坐标点板的高度,求出在任意两个板之间能装水的最大截面积.原创 2014-11-27 01:07:54 · 1031 阅读 · 0 评论 -
Leetcode:convert_sorted_array_to_binary_search_tree
BST的中序遍历是一个sorted-array,再构造回去成一个BST,先将中间的元素作为根节点,这个节点的左右分别是左子树和右子树。如此递归地进行即可。原创 2014-10-10 00:42:30 · 887 阅读 · 0 评论 -
Leetcode:signal_number_ii
给一个数组,其中只有一个数出现一次,其他的数都出现3次,请找出这个数。要求时间复杂度是O(n),空间复杂度O(1)。原创 2014-10-09 23:50:08 · 995 阅读 · 0 评论 -
Leetcode:search_insert_position
一、 题目给定一个数组和要插入数的大小,求插入的位置。二、 分析太水,直接扫描,过…….原创 2014-10-10 00:47:22 · 901 阅读 · 0 评论 -
Leetcode:balanced_binary_tree
判断给定的二叉树是否是平衡二叉树,即每一个节点的深度相差不大于1原创 2014-10-10 00:15:44 · 977 阅读 · 0 评论 -
leetcode:pascal's_triangle_II
这道题跟Pascal's Triangle很类似,只是这里只需要求出某一行的结果。原创 2014-10-24 16:28:32 · 835 阅读 · 0 评论 -
leetcode:Pascal's Triangle
经典题目,杨辉三角,输入行数,生成杨辉三角的数组原创 2014-10-24 14:54:06 · 1009 阅读 · 0 评论 -
Leetcode:integer_to_roman
将给定的数字(阿拉伯数字)转化成罗马数字。数字不会大于3999原创 2014-10-09 00:43:24 · 1251 阅读 · 0 评论