LeetCode
文章平均质量分 69
Code_Granker
hdtopku
展开
-
Combination Sum II | Java最短代码实现
原题链接:40. Combination Sum II【思路】和 Combination Sum 十分类似,都是用回溯算法。只不过candidates中含有重复元素,要求不能有重复组合: public List> combinationSum2(int[] candidates, int target) { ArrayList> result = new Arra原创 2016-03-15 16:40:48 · 419 阅读 · 0 评论 -
148. Sort List | Java最短代码实现
原题链接:148. Sort List【思路】原创 2016-03-16 10:17:09 · 452 阅读 · 0 评论 -
171. Excel Sheet Column Number | Java最短代码实现
原题链接:171. Excel Sheet Column Number【思路】将大写字母映射为26进制数,A的unicode转化为int值为65,即'A' = 65。那么任何一个大写字母减'A'再加1就满足题目的映射关系,如'C' - ’A' + 1 = 67 - 64 = 3。仿造十进制,从左到右乘以进制再加上当前值就可以: public int titleToNumber(S原创 2016-03-30 00:48:34 · 455 阅读 · 0 评论 -
2. Add Two Numbers | Java最短代码实现
原题链接:2. Add Two Numbers【思路】本题考查链表的基本操作。题意是将两个链表从右向左逐位相加,进位加入到下一个节点,其实就是模拟两个数相加: public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode ls = new ListNode(0); ListNo原创 2016-03-18 17:51:01 · 392 阅读 · 0 评论 -
217. Contains Duplicate | Java最短代码实现
原题链接:217. Contains Duplicate【思路】利用hashset的唯一性,逐一往set里添加num,一旦发现添加失败,表示有重复元素,返回true,否则,返回false: public boolean containsDuplicate(int[] nums) { Set set = new HashSet(); for (int原创 2016-03-31 00:27:34 · 306 阅读 · 0 评论 -
169. Majority Element | Java最短代码实现
原题链接:169. Majority Element【思路】用一个c计数,majorEle保存假定的Majority Element,当majorEle与当前数组元素不同的时候,c--,否则c++,当c = 0的时候,用当前数组元素替换majorEle,最后的majorEle一定是Majority Element: public int majorityElement(int[]原创 2016-03-31 00:46:01 · 474 阅读 · 0 评论 -
139. Word Break | Java最短代码实现
原题链接:139. Word Break【思路】本题考查动态规划。设一个boolean数组flag,flag[i]表示s的下标从 0 到 i - 1 是否可以被分词,那么判断s在第 i 个下标是否可以被分词——即flag[i + 1]的true or false,那么就要从 j = i 循环到0,一旦找到一个——即flag[j] && s.contains(s.substring(j,i)原创 2016-03-18 20:32:47 · 339 阅读 · 0 评论 -
331. Verify Preorder Serialization of a Binary Tree | Java最短代码实现
原题链接:331. Verify Preorder Serialization of a Binary Tree【思路】 public boolean isValidSerialization(String preorder) { int curCount = 0; int curShouldCount = 1; int nextSho原创 2016-03-18 20:52:42 · 318 阅读 · 0 评论 -
105. Construct Binary Tree from Preorder and Inorder Traversal | Java最短代码实现
原题链接:105. Construct Binary Tree from Preorder and Inorder Traversal【思路】 public TreeNode buildTree(int[] preorder, int[] inorder) { return createTree(preorder, 0, inorder, 0, preorder.le原创 2016-03-18 21:00:49 · 433 阅读 · 0 评论 -
306. Additive Number | Java最短代码实现
原题链接:306. Additive Number【思路】 public boolean isAdditiveNumber(String num) { for (int i = 1; i <= num.length() / 2; i++) for (int j = 1; j + i < num.length(); j++)原创 2016-03-19 01:21:50 · 490 阅读 · 0 评论 -
43. Multiply Strings | Java最短代码实现
原题链接:43. Multiply Strings【思路】本题借用模拟大数精确乘法考查字符串的位操作。本解答先将结果缓存到 int 数组中,应用 int 数组的好处就是每一个int的值可以大于10: public String multiply(String num1, String num2) { int len1 = num1.length(), len2 =原创 2016-03-19 19:22:41 · 826 阅读 · 0 评论 -
143. Reorder List | Java最短代码实现
原题链接:143. Reorder List【思路】本题考查链表的归并、反转、查找中间结点等知识点。由于过程比较复杂,我的代码尽量写的逻辑清晰,以 [1, 2, 3, 4, 5, 6] 为例对代码进行剖析:1.找到中间节点3,将链表划分为两部分:以head为头节点的 [1,2,3]、以head2为头节点的[4,5,6]2.将head2指向的链表反转,得到[6,5,4]3.归并两原创 2016-03-19 21:30:04 · 360 阅读 · 0 评论 -
71. Simplify Path | Java最短代码实现
原题链接:71. Simplify Path【思路】本题考查字符串和栈的基本操作。本身并不难: public String simplifyPath(String path) { Stack stack = new Stack(); String temp = ""; for (int i = 0; i < path.length(原创 2016-03-19 23:42:02 · 603 阅读 · 0 评论 -
206. Reverse Linked List | Java最短代码实现
原题链接:206. Reverse Linked List【思路】本题考查链表的反转。以 1 -> 2 -> 3 -> 4 -> 5 的反转为例,对代码进行剖析: null 4 -> 5 head p、q null 5原创 2016-03-19 22:32:59 · 879 阅读 · 0 评论 -
224. Basic Calculator | Java最短代码实现
原题链接:224. Basic Calculator【思路】本题考查字符串的基本操作。总共遇到的情况有:数字、+、-、空格、左括号、右括号,6种情况。1. 没有括号时正常运算,将结果存入res中2. 遇到左括号时将res及括号之前的运算符压栈3. 遇到右括号时将当前值乘以左括号之前的符号(stack中取出),并加上左括号前的运算结果(stack中取出): public原创 2016-03-20 15:12:17 · 1489 阅读 · 0 评论 -
47. Permutations II | Java最短代码实现
原题链接:47. Permutations II【思路】本题考查的是回溯算法。与 46. Permutations 不同的是本题数组中的元素可能重复。为此增加了一个记录数组visit。重点在于要能理解!visited.contains(i-1)要理解这个,首先要明白i作为数组内序号,i是唯一的,给出一个排好序的数组,[1,2,2] 第一层递归原创 2016-03-20 21:15:43 · 1262 阅读 · 0 评论 -
5. Longest Palindromic Substring | Java最短代码实现
原题链接:5. Longest Palindromic Substring【思路】本题考查回文字符串。求最长回文子串无非两种情况:1.以该字符为对称轴,同时向左、向右两个方向进行判断2.以两字符串中间的空隙为中轴线,同时向左、向右进行判断顺序遍历字符串就可以得到结果: public String longestPalindrome(String s) {原创 2016-03-20 23:17:59 · 820 阅读 · 0 评论 -
3. Longest Substring Without Repeating Characters | Java最短代码实现
原题链接:3. Longest Substring Without Repeating Characters【思路】本题考查最长的子字符串。本题用一个256大小的数组存储字符,数组 position[i] 的值代表上一次出现int类型的字符 i 的位置,在第二次出现该字符的时候,更新 start 位置,和maxLen的长度。以"abcabcbb"为例,当遍历到第二个a前一刻,start原创 2016-03-21 17:28:08 · 304 阅读 · 0 评论 -
18. 4Sum | Java最短代码实现
原题链接:18. 4Sum【思路】 public List> fourSum(int[] nums, int target) { List> result = new ArrayList>(); Arrays.sort(nums); for (int i = 0; i < nums.length - 3; i++) {原创 2016-03-21 00:36:32 · 562 阅读 · 0 评论 -
leetcode 95. Unique Binary Search Trees II | Java最短代码实现
Given n, generate all structurally unique BST's (binary search trees) that store values 1...n.For example,Given n = 3, your program should return all 5 unique BST's shown below. 1 3原创 2016-03-09 20:43:19 · 1609 阅读 · 0 评论 -
191. Number of 1 Bits | Java最短代码实现
原题链接:191. Number of 1 Bits【思路】运用位运算中的一个技巧n &= (n - 1)可以将最右边的一个1置0后返回给n // you need to treat n as an unsigned value public int hammingWeight(int n) { int res = 0; while (n原创 2016-04-03 00:13:35 · 568 阅读 · 0 评论 -
leetcode 215. Kth Largest Element in an Array | Java最短代码实现
Total Accepted: 46230 Total Submissions: 143069 Difficulty: MediumFind the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth di原创 2016-03-10 15:31:29 · 566 阅读 · 0 评论 -
leetcode leetcode 209 : Minimum Size Subarray Sum | Java最短代码实现
Total Accepted: 33397 Total Submissions: 126933 Difficulty: MediumGiven an array of n positive integers and a positive integer s, find the minimal length of a subarray of which the sum ≥ s. If t原创 2016-03-10 19:46:09 · 898 阅读 · 0 评论 -
93. Restore IP Addresses | Java最短代码实现
原题链接:93. Restore IP Addresses【思路】本题考察回溯算法。本解法采用回溯算法,将ip分为4个字段,需要注意下面几点:1. 每个字段的值均不超过255,且不以0为开头(单独的0允许)。否则,剪枝。2. 如果4个字段都加入到temp中之后,四个字段长度之和不等于s.length() - 1,那么不可加入到result中。 public List re原创 2016-03-22 15:53:46 · 715 阅读 · 0 评论 -
91. Decode Ways | Java最短代码实现
原题链接:91. Decode Ways【思路】本题考查动态规划。用nums数组记录解码种数,nums[i]表示到第 i 个字符,字符串s的解码种数,它由 nums[i - 1]和 nums[i - 2]的解码种数之和,但是会有一些限制,限制条件就是for循环中的2个if语句(第 i - 1个字符的值不能为0,第 i - 2和第 i - 1表示的2位数是大于0,且小于27的):原创 2016-03-22 20:39:39 · 1320 阅读 · 0 评论 -
Rotate List | Java最短代码实现
原文链接:61. Rotate List【思路】1. 将尾指针指向头指针2. 并将head指针向后移动k = count – k % count - 1位,phead = head.next就是新链表的头指针3. 将head.next置空,并返回phead public ListNode rotateRight(ListNode head, int原创 2016-03-11 23:13:48 · 379 阅读 · 0 评论 -
38. Count and Say | Java最短代码实现
原题链接:38. Count and Say【思路】报数指的是,按照其中的整数顺序进行报数,这样就从报数的结果中得到下一个数。本题用 result 表示最终结果,用变量 count 记录连续的相同字符出现的次数,每次循环将中间结果存在 StringBuilder 中: public String countAndSay(int n) { String result原创 2016-04-05 18:52:16 · 408 阅读 · 0 评论 -
Flatten Binary Tree to Linked List | Java最短代码实现
原题链接114. Flatten Binary Tree to Linked List【思路】基本思路就是将右子树挂在左子树最右边,并用左子树替换右子树。将root左子树置空,root指向右子树根节点,如此循环,知道root为空: public void flatten(TreeNode root) { while (root != null) {原创 2016-03-12 21:01:20 · 543 阅读 · 0 评论 -
229. Majority Element II | Java最短代码实现
原题链接:229. Majority Element II【思路】1. 超过n/3元素个数最多只有2个,记为num1和num22. 数组中连续3个数据为一组的话,一共n/3组,那么如果存在符合条件的元素,这个元素一定出现在某一个组内两次3. 知道了以上两个条件后,用所谓的摩尔投票法,共两轮, 第一轮:找出出现次数最多的两个元素,每次存储两个元素num1和num2,如果第原创 2016-03-23 23:42:15 · 519 阅读 · 0 评论 -
131. Palindrome Partitioning | Java最短代码实现
原题链接:131. Palindrome Partitioning【思路】本题考查回溯算法。从下标0开始遍历字符串,一旦在下标 i 找到回文子字符串,那么就把下标从 0 到 i 的子字符串加入temp中,继续从下标 i 接着往下找,一旦curIndex等于字符串长度,那么就把temp加入到result中。如果一直到最后都没找到回文子字符串,那么就进行剪枝: public List原创 2016-03-24 00:41:15 · 1228 阅读 · 0 评论 -
221. Maximal Square | Java最短代码实现
原题链接:221. Maximal Square【思路】本题考查动态规划。我们知道当 maxtrix[i][j] = '1' 时,以 matrix[i][j] 为正方形右下角的边长,最多比以 matrix[i - 1][j]、matrix[i][j - 1]、matrix[i - 1][j - 1] 为右下角的正方形边长大1。如果以 matrix[i - 1][j]、matrix[i][j原创 2016-03-24 10:20:10 · 1162 阅读 · 0 评论 -
60. Permutation Sequence | Java最短代码实现
原题链接:60. Permutation Sequence【思路】假设有n个元素,第K个permutation是a1, a2, a3, ..... ..., an那么a1是哪一个数字呢?我们可以把a1去掉,那么剩下的permutation为a2, a3, .... .... an, 共计n-1个元素。 n-1个元素共有(n-1)!组排列,那么这里就可以知道设变量K1原创 2016-03-24 15:28:43 · 1419 阅读 · 1 评论 -
31. Next Permutation | Java最短代码实现
原题链接:31. Next Permutation【思路】首先,我们来了解一下——字典序法:C++的STL库里面有nextPermutation()方法,其实现就是字典序法。下图简单明了地介绍了字典序法例如,1234的全排列如下:简单归纳,从右边开始,找到第一个正序数 nums[i] ,然后从右边找第一个大于 num[i] 的数 nums[j](原创 2016-03-24 17:39:19 · 1743 阅读 · 0 评论 -
H-Index | Java最短代码实现
原题链接:274. H-Index【思路】题目提示Hash Table,这里采用arrCount数组来记录数量,arrCount[i]表示大于等于被引用次数i的论文数量有多少篇: public int hIndex(int[] citations) { int n = citations.length; int[] arrCount = new i原创 2016-03-14 13:23:51 · 906 阅读 · 0 评论 -
H-Index II | Java最短代码实现
原题链接:275. H-Index II【思路】和 H-Index 一样,只是把复杂度降到了O(logn)。这是二分法的典型应用,如果对二分法不是很了解的读者可以参考我的另一篇博文,Search for a Range 类似二分法模板,可以套用: public int hIndex(int[] citations) { int level = 0;原创 2016-03-14 14:47:35 · 469 阅读 · 0 评论 -
187. Repeated DNA Sequences | Java最短代码实现
原题链接:187. Repeated DNA Sequences【思路】本题考查hashmap和位运算的综合。我们首先来看字母 ”A" "C" “G" "T" 的ASCII码,分别是65, 67, 71, 84,二进制表示为 1000001, 1000011, 1000111, 1010100。可以看到红色部分2bit 就可以区分不同的字符。那么一共需要2 × 10 = 20bit,用原创 2016-03-24 20:53:39 · 485 阅读 · 0 评论 -
151. Reverse Words in a String | Java最短代码实现
原题链接:151. Reverse Words in a String【思路】以空格划分数组,然后从数组的最后到开头添加数组到result,最后去除result结尾的空格: public String reverseWords(String s) { String[] arr = s.split(" "); String result = ""原创 2016-03-24 21:44:26 · 626 阅读 · 0 评论 -
Reverse Linked List II | Java最短代码实现
原题链接:92. Reverse Linked List II【思路】链表的基本操作,首先申请一个mPre节点,其下一个节点指向head。其次,在第一个for循环中完成:1.找到m节点mNode(即mPre.next)2.找到n节点nNode第二个for循环中完成:1.从mNode到nNode的反转当m = 1时,返回nNode,否则返回head: publi原创 2016-03-14 17:17:41 · 367 阅读 · 0 评论 -
3Sum | Java最短代码实现
原文链接 15. 3Sum【思路】蛮力算法,时间复杂度为O(n3),无法ac。我们可以先排序O(nlogn),我们知道2Sum是选定两指针从前后分别向中间扫,找到能找到就直接返回。与2Sum不同的是,3Sum要先选定一个数,再按照2Sum的思路找另两个数,即使找到了,也得继续找下去,不能直接返回。同时,要注意去重: public List> threeSum(int[] nu原创 2016-03-12 14:13:00 · 2239 阅读 · 2 评论 -
Jump Game II | Java最短代码实现
原题链接:45. Jump Game II【思路】是 Jump Game 的拓展,在理解了前者基础上,本题要计算最少步数,那么新增一个变量,preMax记录前一次最大index值,当i小于preMax时,minStep加一步: public int jump(int[] nums) { int maxIndex = nums[0]; int pre原创 2016-03-14 23:19:19 · 429 阅读 · 0 评论