LeetCode
NJU_SE_WaterWan
这个作者很懒,什么都没留下…
展开
-
LeetCode 0024
原题链接:https://leetcode.com/problems/swap-nodes-in-pairs/description/题意理解将单链表中的相邻两元素交换位置只允许交换节点,不允许交换位置。只允许使用常数的空间。本质上就是说,如果有A->B->C->D,那么就转成A->C->B->D实际上只有三步操作:A->...原创 2018-09-05 21:17:54 · 466 阅读 · 0 评论 -
LeetCode 0016
原题链接:https://leetcode.com/problems/3sum-closest/description/题意理解首先我们是做过3sum的,于是显然,我们有一个O(n2)O(n2)O(n^2) 的做法我的代码class Solution { public int threeSumClosest(int[] nums, int target) {...原创 2018-03-08 16:40:38 · 1552 阅读 · 0 评论 -
LeetCode 0015
题目链接:https://leetcode.com/problems/3sum/description/题意理解在一个列表中找三个数,使得其和为0。做过2sum的朋友应该知道,假设要找出是否存在两个数的和为sumsumsum,O(n)O(n)O(n) 做法是边做边加到set里,读到一个新数就查一下sum−a[i]sum−a[i]sum-a[i] 是否在set里面。ok,知道了2su...原创 2018-03-07 22:28:23 · 1482 阅读 · 0 评论 -
LeetCode 0011
题目链接:https://leetcode.com/problems/container-with-most-water/description/题意理解我理解错了,最后看了别人的思路写了一个代码,然而并不能很好理解这个思路。参考网址:https://segmentfault.com/a/1190000008824222#articleHeader2我的代码cl...原创 2018-03-07 16:46:51 · 1481 阅读 · 0 评论 -
LeetCode 0008
原题链接:https://leetcode.com/problems/string-to-integer-atoi/description/题目理解主要要看好题目给的提示。另外判断越界可以一边往后面加数字,一边判断是否越界。我的代码 public int myAtoi(String str) { if(str == null || str....原创 2018-03-07 16:46:35 · 1385 阅读 · 0 评论 -
LeetCode 0006
题目链接:https://leetcode.com/problems/zigzag-conversion/description/题意理解要求把原来的字符按竖着搞一个“之”字型拜访,然后横着拼接起来。我的代码class Solution { public String convert(String s, int numRows) { if (...原创 2018-03-07 16:46:18 · 1380 阅读 · 0 评论 -
LeetCode 0104
104. Maximum Depth of Binary Tree原题链接我的思路:要找一棵二叉树的最大深度,只要找它子树的最大深度+1,显然递归。我的代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *rig原创 2017-10-14 17:14:27 · 5332 阅读 · 0 评论 -
LeetCode 0101
101. Symmetric Tree原题链接我的思路:这题是说判断一颗树是否是镜像的。那么怎么判断呢?如果说,一左一右子节点的值不相同(包含一个存在一个不存在的情况),那么就肯定不一样的。此时我们就需要比较子节点的子节点了,注意到是镜像,显然l->r和r->l比,l->l和r->r比。此时已经到第三层了。我们想要用递归,就需要验证一下,这个规律是否正确。其实在第2层的时候,我们就把问题已经变成了这原创 2017-10-14 17:07:11 · 14855 阅读 · 0 评论 -
LeetCode 0108
108. Convert Sorted Array to Binary Search Tree原题链接我的思路:显然平衡二叉树的特点是根节点的左边的值都小于根节点的值,根节点的右边的值都大于根节点的值。这个性质与排序好的数组是一样的,那么为什么不就按照这个性质来写一个递归呢?而且这种递归一般写起来都是加一个辅助的函数就好。可以说是很 熟练 了。我的代码:/** * Definition for a原创 2017-10-21 00:11:54 · 2758 阅读 · 0 评论 -
LeetCode 0107
107. Binary Tree Level Order Traversal II原题链接我的思路:这题是要求一个树的层次遍历,然后反转返回层次的值。那么显然,如题所要求的——先求层次遍历,再反转——就是一种做法。其实树的层次遍历应该是很好写的,但是这里需要分清层,因此我开两个vector分别记录父节点和子节点。用\/** * Definition for a binary tree node.原创 2017-10-20 23:48:16 · 2892 阅读 · 0 评论 -
LeetCode 0083
83. Remove Duplicates from Sorted List原题链接我的思路:只要找到相同的就删除后面的那个元素最快解法的答案:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : va原创 2017-10-04 18:57:03 · 2426 阅读 · 0 评论 -
LeetCode 0017
原题链接:https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/题意理解给出一些数字组成的字符,要求求出所有的对应的字母的组合。只能说这个题目在刚开始学程序设计的时候就做过了,还是很简单的,就是一个递归。。。我的代码class Solution { pr...原创 2018-03-08 17:03:34 · 1570 阅读 · 0 评论 -
LeetCode 0018
原题链接:https://leetcode.com/problems/4sum/description/题意理解诶这题跟3sum做法差不多,我们可以想到固定前2个,然后找第三个和第四个数字我的代码class Solution { public List<List<Integer>> fourSum(int[] nums, int ta...原创 2018-03-08 17:25:45 · 1719 阅读 · 0 评论 -
LeetCode 0023
原题链接:https://leetcode.com/problems/merge-k-sorted-lists/description/题意理解要将n个已排序好的list拼接成一个有序的list,此处的有序均是从小到大。我的代码/** * Definition for singly-linked list. * struct ListNode { * ...原创 2018-09-05 21:17:42 · 291 阅读 · 0 评论 -
LeetCode 0019
原题链接:https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/题意理解从一个链表中删除倒数第n个元素我的想法是,删除倒数第n个元素,实际上是找倒数第n+1个元素,然后删除其后面一个元素。然后此时就是经典的双指针解法了。实际上第n+1个元素不一定存在,所以可以在前面开一个虚拟节点,最...原创 2018-04-13 23:30:57 · 871 阅读 · 0 评论 -
LeetCode 0012
原题链接:https://leetcode.com/problems/integer-to-roman/description/题意理解把一个正整数转化为罗马数字,其中这个正整数为1-3999间的一个数我记得我以前就是打表一发暴力莽。我的代码 public String intToRoman(int num) { int[] base = ...原创 2018-04-13 22:49:03 · 831 阅读 · 0 评论 -
LeetCode 0010
原题链接:https://leetcode.com/problems/regular-expression-matching/description/题意理解就是求一个正则表达式的匹配。显然,这时候掏出Java的Pattern就好了。(如果是编译原理的话,那么考虑一下RE⇒NFA⇒DFA⇒DFAo⇒program可以参考我的这篇文章:https://blog.csdn....原创 2018-04-12 23:53:29 · 886 阅读 · 0 评论 -
LeetCode 0022
原题链接:https://leetcode.com/problems/generate-parentheses/description/题意理解就是说给定n,要求找出n对括号所有的合法情况。我直接递归一下不就行了嘛,反正应该是可以做的,除非爆栈。。那可能就要另外考虑一下了。我的代码class Solution { private List<String...原创 2018-04-14 23:15:33 · 825 阅读 · 0 评论 -
LeetCode 0050
原题链接:https://leetcode.com/problems/powx-n/description/题意理解这题里面的坑还是很多的。一个是整数的最大值和最小值并不互为相反数,还有一个问题是溢出的问题,如果写不好就有可能溢出。我的代码class Solution { public double myPow(double x, int n) { ...原创 2018-03-26 11:02:06 · 1172 阅读 · 0 评论 -
LeetCode 0005
原题链接:https://leetcode.com/problems/longest-palindromic-substring/description/题意理解我的想法是,直接从中间往两边扩展,一直到不能扩展为止。当然需要按奇数偶数来讨论一下。当然也想了一种取倒置然后找最长公共子串的做法,但是只是想了一下,因为不会做。我的代码class Solution { ...原创 2018-03-06 16:39:51 · 1320 阅读 · 0 评论 -
LeetCode 0004
题目链接:https://leetcode.com/problems/median-of-two-sorted-arrays/description/题意理解从两个有序数组中,找出合并数组后的中位数。观察复杂度显然可知,是一个二分查找。然后根据中位数的知识可知,这显然要根据两个数组的长度和进行分类讨论。上面都是一眼能看出来的,那么怎么二分呢?如果用非递归形式,可能会...原创 2018-03-23 11:14:23 · 1391 阅读 · 0 评论 -
LeetCode 0003
原题链接:https://leetcode.com/problems/longest-substring-without-repeating-characters/description/题意理解这个题目可以用滑动窗口来解决。用[l,r][l,r][l,r] 描述最终给出长度的区间。如果a[r+1]a[r+1]a[r+1] 在[l,r][l,r][l,r] 中出现过,那么就清除[l...原创 2018-03-06 16:03:01 · 1230 阅读 · 0 评论 -
LeetCode 0002
原题链接:https://leetcode.com/problems/add-two-numbers/description/题意理解给定两个非负数,是按逆序给出的,比如“123”对应的就是“321”,“10”对应的就是“01”。求出这两个数的和,并也用逆序表示,用链表实现。我个人非常难理解链表,因为这里面如果写法很糟糕,就会有很多细节。然后改啊改啊,最后变成了下面的版本。下面的版...原创 2018-03-05 01:05:19 · 937 阅读 · 0 评论 -
LeetCode 0070
70. Climbing Stairs[原题链接](Climbing Stairs)我的思路:这题无需多说,只需要知道对于ana_n 表示爬n层台阶到顶的方式,那么有a0=1,a1=1,a2=2,an+2=an+1+ana_0 = 1,a_1 = 1,a_2 = 2,a_{n+2} = a_{n+1} + a_n就可以了,是一条简单的数列题。最快速度代码:class Solution {publi原创 2017-10-04 17:40:32 · 1826 阅读 · 0 评论 -
LeetCode 0069
69. Sqrt(x)原题链接我的思路:这题应该用牛顿迭代法就好了。牛顿迭代法的伪码大概描述一下就是:要求sqrt(a)sqrt(a) x1=a/2,xn+1=(xn+axn)/2x_1 = a/2, x_{n+1} = (x_n + \frac a {x_n}) / 2 直到xnx_n 与 xn+1x_{n+1} 的差足够小。在这里我直接取整返回。我的代码:class Solution {pu原创 2017-10-02 14:48:17 · 4069 阅读 · 0 评论 -
LeetCode 0020
20.Valid Parentheses原题链接我的思路匹配的话,如果有复合的情况,那么是里面和里面匹配,外面和外面匹配。直接用“栈”这个数据结构就好了。我的代码:丑,请轻喷class Solution {public: bool isPair(char l, char r) { if(l == '(' && r == ')') { return tr原创 2017-09-25 09:46:17 · 558 阅读 · 0 评论 -
LeetCode 0683
683. K Empty Slots原题链接我的思路:首先,题目用的变量有点奇怪,注意这点:flowers[i] = xmeans that the unique flower that blooms at dayiwill be at positionx其次,题目中有这么一句话:Also given an integer k, you need to output in which day the原创 2017-09-24 18:14:33 · 1590 阅读 · 0 评论 -
LeetCode 0684
684. Redundant Connection原题链接我的思路:这条题目是问无向图何时会成环,想着可以用dfs,也可以用并查集,不过我看这里的并查集比较好写,就直接写并查集了,为了偷懒,连merge都直接写到函数里了。我的代码:求轻喷。class Solution {public: const static int maxn = 1010; int fa[maxn];原创 2017-09-24 16:52:02 · 518 阅读 · 0 评论 -
LeetCode 0681
681. Next Closest Time原题链接我的思路:这条题目只需模拟一下就好了我的代码:写的丑求轻喷class Solution {public: string nextClosestTime(string time) { set<char> tb; int len = time.size(); for(int i = 0; i <原创 2017-09-24 16:45:38 · 491 阅读 · 0 评论 -
LeetCode 0682
682. Baseball Game原题链接我的思路:这题目没有什么难度,只需要对着题目模拟一下就好了我的代码:写的丑求轻喷class Solution {public: vector<int> valids; int res; int calPoints(vector<string>& ops) { valids.clear(); res原创 2017-09-24 16:42:56 · 497 阅读 · 0 评论 -
LeetCode 0007
原题链接我的解法:直接转置即可class Solution {public: int reverse(int x) { const int max = 0x7fffffff; const int min = 0x80000000; long long res = 0; while(x) { res *=原创 2017-09-23 12:40:17 · 212 阅读 · 0 评论 -
LeetCode 0014
原题链接这题要求的是,所有字符串的公共前缀,并且这个公共前缀是最长的,比如”abc”和”ab”,”a”是这两个字符串的公共前缀,”ab”也是,但是由于”ab”更长,因此返回是”ab”。我的思路:直接暴力求解就好了,其中再加一点优化class Solution {public: string longestCommonPrefix(vector<string>& strs) {原创 2017-09-23 23:30:05 · 530 阅读 · 0 评论 -
LeetCode 0680
原题链接我的做法:用两个指针,遇到不一样的地方尝试两次,其实这时候应该想到用函数写的,用函数写起来简单一些,并且思路更清晰。最快答案的解法:class Solution {public: bool validPalindrome(string s) { int n = s.length() ; if(n <= 1)return true; int l = 0原创 2017-09-23 22:58:15 · 194 阅读 · 0 评论 -
LeetCode 0013
原题链接我的思路:如果在大的数字在后面,那么需要减去前面的,如果大的数字在前面,那么直接加就好了。最快解法的思路:我当时想出了这么一个点:IM是不是999?如果按照最快答案的做法,并不是999。最快解法的作者应该是对罗马数字相当熟悉了,我怀疑百度百科上对于罗马数字的描述并不完整。后来我在万能的空间里问了这个问题,好友给出了答案: (3)V 和 X 左边的小数字只能用Ⅰ。 (4)L 和 C 左边的原创 2017-09-23 19:57:08 · 203 阅读 · 0 评论 -
LeetCode 0009
原题链接我的解法:我没有认真看题目,所以是转成string做的,显然是不可以的。最快答案的做法:首先考虑到负数一定不是回文数,因此给出一波判断。之后将给定的数字转置,然后判断转置前后的数字是否一致。class Solution {public: bool isPalindrome(int x) { if(x<0) return false; int sum=原创 2017-09-23 12:53:23 · 172 阅读 · 0 评论 -
LeetCode 0021
21.Merge Two Sorted Lists原题链接我的思路:显然这条题目里所说的已经排好序,是基于这么一个假设:两个list都是按值从小到大排序的。没有出现我们之前C++作业那种,有3种可能:两个都是从小到大排序两个都是从大到小排序一个是从小到大排序,另一个是从大到小排序我已经不记得当时要求返回值的顺序是什么样子了。我先假设是要求从小到大排序。那么从作业转换到这条题目,只需要将从大到原创 2017-09-25 10:11:37 · 779 阅读 · 0 评论 -
LeetCode 0026
26.Remove Duplicates from Sorted Array原题链接我的思路:只需要知道前一个上一个不一样的元素是什么,就可以判断下一个元素是否已经出现过,如果按照我的做法,注意要判断特殊情况:nums是空的对于第0号元素,它上一个不一样的元素是什么?显然我们只要找一个不等于0号元素的就好了。由于我对返回值的理解不够透彻,对函数副作用的理解也不够,因此我的代码不够精妙,于是贴上原创 2017-09-25 10:35:26 · 183 阅读 · 0 评论 -
LeetCode 0067
67. Add Binary原题链接 我的思路:直接两个字符串按尾对齐,然后模拟加法就好了。只要细心一点应该是没有问题的。我的代码:class Solution {public: string addBinary(string a, string b) { string res = ""; int la = a.size(); int lb原创 2017-10-02 14:15:17 · 1435 阅读 · 0 评论 -
LeetCode 0066
66.Plus One原题链接我的思路:这题是说,一个正整数用vector存储每一位数字。那么我只需要暴力模拟进位就好了,考虑到溢出的情况,我在前面加了一个0,如果最后没有进位的话,就把前面的0去掉。我的代码:class Solution {public: vector<int> plusOne(vector<int>& digits) { digits.insert(di原创 2017-10-01 22:58:18 · 442 阅读 · 0 评论 -
LeetCode 0058
58.Length of Last Word原题链接我的思路:既然是找最后一个单词的长度,从后往前找就好了。注意,可能会在字符串的末尾出现空格。我的解法:class Solution {public: int lengthOfLastWord(string s) { int len = s.length() - 1; int res = 0;原创 2017-10-01 22:47:15 · 524 阅读 · 0 评论