LeetCode
行者小朱
stay hungry,stay foolish
展开
-
LeetCode---Rectangle Area解题分析
题意描述:计算二维平面上的图形面积,图形由两个矩形组成,如下图所示: 解题分析:刚开始拿到题目觉得很简单,认为矩形有重叠部分,要么分块求和,要么求两矩形之和再减去重叠部分面积,然后提交总是报错。后来多次提交,才发现该题目所给的测试用例考虑到了各种情形,总结如下: 1、两矩形没有重叠(ovreRect = 0) (1)其中一个或两个矩形的面积为0(即给定的矩形的两对坐标数字相同);原创 2016-05-14 12:08:07 · 517 阅读 · 0 评论 -
LeetCode---Remove Duplicates from Sorted ListII解题分析
题意描述:给定一个单向链表,如果某元素重复则删除所有重复的结点,只保留原始链表中只出现了一次的结点。如: 1->2->3->3->4->4->5,返回1->2->5 1->1->1->2->3,返回2->3 解题思路:(Remove Duplicates from Sorted ListII)还是利用I中删除链表中重复的结点的方法,引用又指针一个指向当前结点,另一个指向下一个结点,进行原创 2016-06-04 17:39:36 · 323 阅读 · 0 评论 -
LeetCode---Integer Break解题分析
题意描述:将一个正整数分解成至少两个正整数数字之和的形式,求所有组合中因子乘积最大的分解,并返回该最大乘积。比如:n=2, return 1(2=1+1); n=10, return 36(10=3+3+4) 解题思路:先找规律 4=2+2,return 4 5=3+2,return 6 6=3+3,return 9 7=4+3,return 12 8=3+3+2,原创 2016-05-26 10:04:41 · 675 阅读 · 0 评论 -
LeetCode---Binary Tree Level Order Traversal、Binary Tree Level Order Traversal II解题分析
题意描述:给定一棵二叉树,按层次顺序输出。比如给定序列:{3,9,20,#,#,15,7},其对应的二叉树、从根到叶层次顺序输出、逆向层次输出依次如下 二叉树的逻辑视图: 按从根到叶层次顺序输出: 从叶到根的层次顺序输出: 解题思路:这就用到了二叉树的层次遍历,用队列依次存放每个的结点;在判断每层结束时这里用的是用一个临时链表一层时暂时存该层结点,当该链表为空时这一层遍历完毕,同时原创 2016-05-07 19:31:36 · 491 阅读 · 0 评论 -
LeetCode---Product Of Array Except Self解题分析
题意描述:给定一个包含n个整数的数组,返回乘积数组(乘积数组第i处的元素表示原数组乘积中不包含i位置数的积)。如:给定[1,2,3,4],应当返回[24,12,8,6] 解题思路一:自然是想到先求出整个数组的乘积totalProduct,然后计算res[i]时用pro/num[i]即可int[] productExceptSelf(int[] nums) { int totalProduct原创 2016-06-06 21:48:23 · 553 阅读 · 0 评论 -
LeetCode---Top K Frequent Elements解题分析
题意描述:给定一个整数数组和数字K,返回数组中出现最频繁的K个元素。如: 输入[1,1,1,2,2,3],K=2,返回[1,2]。要求时间复杂度为O(nlogn) 解题思路:考虑到统计字符及其出现频率,自然就想到运用HashMap数据结构,key为元素,value为该元素出现次数。然后将结果按照value排序,返回前K个key值即为所求 ***这里主要是对HashMap中的数据按照val原创 2016-06-14 20:15:57 · 419 阅读 · 0 评论 -
LeetCode---Count Numbers with Unique Digits解题分析
题意描述:给定一个非负数n,计算0 解题思路一:数字的基本元素是[0,1,2,3,4,5,6,7,8,9]共10个数字,则有以下结论: n=0 --- 1 [0] n=1 --- 1+9=10 [0;1,2,3,4,5,6,7,8,9] n=2 --- 10+81 [0;1...9;10...98(除去11,22...99)],1+9+9*9 n=3 --- 10+9原创 2016-06-30 20:30:57 · 838 阅读 · 0 评论 -
Number of 1 Bits(二进制中1的个数)
题意描述:写一个函数计算无符号整数二进制形式中1的个数。如“11”(二进制形式“00000000000000000000000000001011”)返回3; 解题思路一:Java中没有unsigned int,这里采用通过移位来实现计数1的个数 int hammingWeight(int n) { int count = 0; while(n != 0){//因为Java中没有无符号的整数原创 2016-06-04 14:58:41 · 1009 阅读 · 1 评论 -
LeetCode---Bulb Switcher解题分析
题意描述:给定n个灯泡,初始化全为off,第一趟全问部on,第二趟将每第二个off,第三趟将每第三个反转……第n趟将第n个反转,最后返回灯泡处于on的数目。给定n=3,则有以下过程: 开始时,3个灯泡[off, off, off];第一轮,3个灯泡[on, on, on];第二轮,3个灯泡[on, off, on];第三轮,3个灯泡[on, off, off]。所以最后返回1 解题思路一:该方原创 2016-06-30 21:45:32 · 434 阅读 · 0 评论 -
找到栈最小元素
题意描述:定义栈的数据结构,请在该类型中实现一个能够找到栈最小元素的min函数。在该栈调用min、push、pop的时间复杂度都是O(1) 解题思路:引用数据栈和辅助栈解题, 入栈:数据栈中直接压入元素,当辅助栈空或者要压入的元素小于当前辅助栈栈顶元素时,辅助栈也压入该元素 出栈:在数据栈不空的前提下,如果辅助栈栈顶元素与数据栈栈顶元素相等,则都弹出;否则只弹出数据栈栈顶元素 得最小元素:原创 2016-06-06 15:54:19 · 2079 阅读 · 2 评论 -
软件版本字符串排序
题意描述:软件的版本号一般是由数字和“.”组成的字符串,现比较两个字符串version1和version2,如果version1>version2返回1,如果version 解题思路:字符串由数字和"."组成,所以先将字符串通过split()转化为字符数组,再逐位比较如果index=i区别出来了直接返回,否则比较index=i+1位 int compareVersion(String vers原创 2016-06-04 15:18:47 · 2250 阅读 · 0 评论 -
LeetCode---Remove Duplicate Letters解题分析
题意描述:给定一个只包含小写字母的字符串,删除字符串中重复的字符,然后返回新的字符串是字典顺序排中最小的(不能打乱其原本的相对位置)。如:给定 "bcabc",返回 "abc"; 给定 "cbacdcbc",返回 "acdb" 解题思路一:刚开始拿到这个题目时想法很简单,但忽略了括号里面的东东,提交报错后才突然发现加了括号里面的东东后题目难度大大提升。 首先统计出每个字符出现的次数,用vis原创 2016-06-07 16:53:01 · 2015 阅读 · 0 评论 -
LeetCode---UglyNumberII解题分析
题意描述:UglyNumber的定义为一个数分解后只包含2、3、5因子,比如6、8是UglyNumber而14不为UglyNumber,1是典型的UglyNumber。求第N个UglyNumber 解题思路一:逐个判断每个数字是否为UglyNumber至第N个UglyNumber为止,而判断每个数字是否为UglyNumber就是根据定义依次除去因子5、3、2,当不能再被5、3、2整除时是1就是U原创 2016-05-05 14:37:51 · 590 阅读 · 0 评论 -
LeetCode---Implement Queue Using Stacks、Implement Stack Using Queues解题分析
题意描述:用两个栈来实现一个队列的操作,用两个队列来实现一个栈的操作 解题思路: 用栈实现队列的操作:栈S1、S2分别用于入队、出队 (1)入队:若S1不满直接将新元素放入S1,若S1满则将S1中元素转入S2,然后再将新元素放入S1; (2)出队:若S2不空则直接从S2弹出栈顶元素,若S2空则先将S1元素转到S2再弹出S2栈顶元素; public class ImplementQueue原创 2016-05-13 11:49:26 · 450 阅读 · 0 评论 -
判断一个链表是否是回文链表
题目描述:判断一个链表是否是回文链表(如何能达到时间复杂度为O(n)的同时空间复杂度为O(1)) 解题思路:最初的思路是遍历链表,取出其中的结点值拼成字符串,然后判断字符串是否是回文字符串,如下: boolean isPalindrome(ListNode head) { ListNode p = head; String str = ""; while(p != null){ st原创 2016-05-26 08:41:39 · 10194 阅读 · 8 评论 -
LeetCode---Remove Duplicates from Sorted List解题分析
题意描述:(Remove Duplicates from Sorted List)给定一个单向已排序的链表,删除链表中重复的元素使每个元素只出现一次。如:1->1->1->2,返回1->2; 1->1->2->3->3->,返回1->2->3 (Remove Duplicates from Sorted ListII)给定一个单向链表,如果某元素重复则删除所有重复的结点,只保留原始链表中原创 2016-06-04 17:34:54 · 498 阅读 · 0 评论 -
LeetCode---Palindrome Number解题分析
题意描述:判断一个数字是否是回文数字 解题思路:我们在判断一个字符串是否是回文串常用的方法就是将字符串逆序,然后判断与原来字符串是否相等,同理的思路运用到这里 //解题思路一:将整数转化为字符串,再逆序字符串判断是否为回文串 boolean isPalindrome(int x) { String str = Integer.toString(x); return str.equals原创 2016-05-07 18:38:50 · 319 阅读 · 0 评论 -
LeetCode---Isomorphic Strings、Word Pattern解题分析
题意描述:Isomorphic Strings(同构字符串):给定两个字符串,判断它们是否为同构字符串,如下:原创 2016-05-14 18:01:27 · 737 阅读 · 0 评论 -
LeetCode---Pascal Triangle、Pascal Triangle II解题分析
题意描述:给定一个数字N,生成N行的帕斯卡三角形,所谓的帕斯卡三角形如下所示: 题目的升级版本是给定数字K,返回第K行的内容,比如K=3,返回[1,3,3,1] 解题分析:帕斯卡三角形也就是我们所谓的杨辉三角形,写成如下形式更容易观察: 可知规律是每行a[i,0]=a[i,i]=1,其他位置上的数字就是a[i,j]=a[i-1,j-1]+a[i-1,j] List> gen原创 2016-05-12 22:25:22 · 552 阅读 · 0 评论 -
LeetCode --- Valid Anagram解题分析
题目描述:给定两个字符串,判断是否是字谜游戏。比如: s = "anagram", t = "nagaram", return true. s = "rat", t = "car", return false. 解题思路一:只要字符串中所有字母出现次数相同即可判定是字谜游戏,所以统计两字符串各字符出现的次数,如果都相同则返回true,否则返回false: bool isAna...原创 2016-03-09 20:41:40 · 862 阅读 · 0 评论 -
LeetCode --- RomanToInteger、IntegerToRoman解题分析
题目描述:罗马数字转阿拉伯数字,阿拉伯数字转罗马数字,数字的范围是1~3999。 拿到这个题目,首先得明白罗马数字的书写形式及与数字的照关系,如下图所示: 所以,对于罗马数字转阿拉伯数字,可以借用map表中的对的格式进行处理 public class Solution { public int romanToInt(String s) { char[] sym原创 2016-03-07 14:42:38 · 515 阅读 · 0 评论 -
LeetCode --- Add Digits解题分析
题目内容:将一个非负整数,通过不断循环将各个位置上的数字相加,最终为一位数时即为所求结果。比如: num = 38 3 + 8 = 11 1 + 1 = 2 结果就输出2 解题思路一:蛮力求解,将数字逐位相加,循环这样做,至一位数时即为所求结果 int solution1(int n){//调用getSum,判断返回值如果不是一位数继续调用getSum求和 int result =原创 2016-02-27 21:41:56 · 483 阅读 · 0 评论 -
LeetCode---Super Ugly Number解题分析
题目描述:给定长度为K的质因子列表,编写程序寻找第N个SuperUglyNumber。例如:给定长度为4的质数序列primes={2,7,13,19},则对应前12个SuperUglyNumber序列为{1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32} 解题思路:可以参考上一篇UglyNumberII的求解思路,即依次由小的SuperUglyNumber乘给定原创 2016-05-05 15:37:40 · 1026 阅读 · 0 评论 -
LeetCode --- ExcelSheetColumnTitle 、ExcelSheetColumnNumber解题分析
题目描述:Excel表的每一列都是字母,问将其列字母转换成数字比如何转换,将数字兑换成列又如何转换。形式如下: 1A 2B 3C …… 26Z 27AA 28AB …… 解题思路:该题目就是找到数字与字母之间的转换关系。 对于给定的数字,1~26为A~Z、27~52为AA~AZ、然后是BA~BZ……所以确定两点:(1)计算时如果数字模26,则26个就对应0,所以应为n%25+1;(2)高位的原创 2016-03-21 15:51:50 · 420 阅读 · 0 评论 -
LeetCode---PowerOfTwo、PowerOfThree、 PowerOfFour解题分析
题意描述:给定一个整数,分别判断其是否为2的N次幂、3的N次幂、4的N次幂 解题思路:对于2的N次幂的整数: //解题思路一:2的N次幂都只有各位上只有一个1,剩下的全为0,所以可以参考NumberOfOneBits的思路 //如果只有1个位上有1,则为2的幂指数 private static boolean isPowerOfTwo(int n){ int count = 0; whil原创 2016-05-04 21:57:55 · 632 阅读 · 0 评论 -
LeetCode---Valid Sudoku解题分析
题意描述:判断矩阵是否是一个数独矩阵。所谓的数独矩阵就是9*9的矩阵,每一行一个元素只出现一次、每一列一个元素只出现一次,并且在任意一个小矩阵中一个元素只出现一次(所说的元素指0-9这九个数字) 矩阵如下图所示: 解题分析:解题思路:注意题目中说的是只要当前已经填充的数字是合法的就可以,不一定要这个数独是有解的。依次判断已给定的矩阵每一行、每一列、以及每个小矩阵上是否是有重复数字即可;原创 2016-05-30 21:40:08 · 3088 阅读 · 2 评论 -
LeetCode---Linked List Cycle、Linked List Cycle II解题分析
题意描述:给定一个单向链表,(1)判断其是否有环;(2)如果有环找出环结点。 解题分析:一个单向链表如果有环,则必然存在最后一个结点的next指针指向链表中其他任意一个结点。如果单从结点上判断,这就相当于一没有尽头的死循环,所以一个指针肯定不行,就想到利用两个指针,然后以不同的速度从起点出发,如果两个指针能够相遇,则说明存在回路(证明就是小时常做的应用题目:小明和小红在操场跑步一个快一个慢,从一...原创 2016-05-17 21:29:24 · 863 阅读 · 0 评论 -
LeetCode---Reverse String解题分析
题意描述:将一个字符串逆序 解题思路:许多题目中都用到字符串的逆序,这里实现两种方法 //方法一:调用JavaAPI中的StringBuilder的方法的reverse() public static String reverse1(String s){ return new StringBuilder(s).reverse().toString(); } //方法二:上面的方法调用了Ja原创 2016-05-07 18:58:44 · 596 阅读 · 0 评论 -
LeetCode---Counting Bits解题分析
题意描述:给定一个非负整数num,则返回区间[0,num]中每个数字对应的二进制中1的个数。比如“num=5”,返回[0, 1, 1, 2, 1, 2] 解题思路一:这里借鉴上一题的解法,一个函数实现计算数字的二进制形式中1的个数,然后在另一个函数中调用进而求出区间内每个数字的二进制形式中1的个数 public int NumbersOf1Bits(int n) { int count =原创 2016-06-04 15:09:37 · 891 阅读 · 0 评论 -
LeetCode---Remove Duplicates from Sorted Array、Remove Duplicates from Sorted Array II解题分析
题意描述:移除已排序数组中的相同元素,使得每个元素只出现一次,返回新数组长度。如果每个元素允许最多出现两次,返回新的数组长度呢 解题分析:题中明确说明数组已排好序,所以对于让每个元素只出现一次情况,声明两个变量表示下标从i=0,j=1开始,如果j所指向元素与i指向元素相同,则j++,否则++i位置的元素就等于j位置的元素,等到j遍历完整个数组,则数组处理完毕,新的数组的长度就是i+1 int原创 2016-05-07 21:30:52 · 367 阅读 · 0 评论 -
复杂链表的复制(随机指针)
题意描述:请实现函数ComplexListNode *Clone(ComplexListNode* head),复制一个复杂链表。在复杂链表中,每个结点除了有一个pNext指针指向一下一个结点外,还有一个pOther指向链表中任意结点或NULL。结点的定义如下: struct ComplexListNode { int val; ComplexListNode* pNext; Co...原创 2016-06-29 22:18:39 · 482 阅读 · 0 评论