LeetCode刷题
文章平均质量分 87
ciderpark
梦想随风而去 而生活住在风里
展开
-
【LeetCode刷题记录】20. 有效的括号
题目描述:题解:一、递归每次检查相邻且成对出现的合法符号,有则删除该对,直到没有相邻且成对出现的为止。map<char, char> wordbook = { { ')', '(' }, { ']', '[' }, { '}', '{' }};bool isValid(string s) { if (s.empty())return true; if (s.si...原创 2020-04-02 13:29:00 · 175 阅读 · 0 评论 -
【LeetCode刷题记录】19. 删除链表的倒数第N个节点
题目描述:题解:问题的关键是如何确定倒数第n个节点的位置,先看代码:ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode *h = new ListNode(0); h->next = head; ListNode *p = h; ListNode *k = h; if (head->next == ...原创 2020-04-02 12:06:35 · 147 阅读 · 0 评论 -
【LeetCode刷题记录】18. 四数之和
题目描述:题解:一、排序+双指针思路和三数之和类似,不赘述。vector<vector<int>> fourSum(vector<int>& nums, int target) { if (nums.empty() || nums.size() < 4)return{}; sort(nums.begin(), nums.end());...原创 2020-04-02 11:45:01 · 117 阅读 · 0 评论 -
【LeetCode刷题记录】17. 电话号码的字母组合
题目描述:题解:一、自己写的平庸全排列思路简单,直接看代码。vector<string> letterCombinations(string digits) { if (digits.empty())return{}; vector<string> key_map{ "abc","def","ghi","jkl","mno","pqrs","tuv","wxy...原创 2020-04-02 11:28:34 · 231 阅读 · 0 评论 -
【LeetCode刷题记录】16. 最接近的三数之和
题目描述:题解:一、排序+双指针类似上一题,思路比较简单,直接看代码。int threeSumClosest(vector<int>& nums, int target) { sort(nums.begin(), nums.end()); int rst = nums[0] + nums[1] + nums[2]; for (int i = 0; i < ...原创 2020-04-01 13:33:46 · 140 阅读 · 0 评论 -
【LeetCode刷题记录】15. 三数之和
题目描述:题解:一、排序+双指针思路简单,直接看代码。vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> rst; sort(nums.begin(), nums.end()); if (nums.empty() || nums...原创 2020-04-01 13:23:07 · 95 阅读 · 0 评论 -
【LeetCode刷题记录】14. 最长公共前缀
题目描述:题解:思路比较简单。一、水平扫描string longestCommonPrefix(vector<string>& strs) { string rst{}; if (strs.empty())return rst; for (int i = 0; i < strs[0].size(); i++) { char c = strs[0][i]...原创 2020-04-01 13:08:04 · 107 阅读 · 0 评论 -
【LeetCode刷题记录】13. 罗马数字转整数
题目描述:题解:一、直接求解(时间复杂度O(n),空间复杂度O(1))int romanToInt(string s) { int rst = 0; for (int i = 0; i < s.size(); i++) { switch (s[i]) { case 'M':rst += 1000; break; case 'D':rst += 500; brea...原创 2020-04-01 11:43:14 · 120 阅读 · 0 评论 -
【LeetCode刷题记录】12. 整数转罗马数字
题目描述:题解:两种解法,思路都比较简单,第二种比较有意思。一、暴力法(时间复杂度O(1),空间复杂度O(1))string intToRoman(int num){ string result; vector<string> tmpVec1 = { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" ...原创 2020-04-01 11:18:52 · 93 阅读 · 0 评论 -
【LeetCode刷题记录】11. 盛最多水的容器
题目描述:题解:一、暴力破解(时间复杂度:O(n2), 空间复杂度:O(1))BF方法的思路简单,两层循环,遍历所有可能性,找出其中最大的。不作赘述。二、双指针使用双指针,一个指头,一个指尾,面积=较短的高度*两者间距,短的一侧向中间移动,直至两指针重合。代码:int maxArea(vector<int>& height) { int res = 0; i...原创 2020-04-01 10:57:19 · 159 阅读 · 0 评论 -
【LeetCode刷题记录】10. 正则表达式匹配
题目描述:题解:一、回溯检查时,如果只考虑’.’,显然只需要同时在s和p中越过当前元素就可以了。对于’*’,要分两种情况考虑:1、表示0个前面那个元素,这时在p中越过它和它前面那个元素,s不变;2、表示1个前面那个元素(可以扩展到n个),这时在s中越过当前元素,p不变。引用官方解答的一句话:“当模式串中有星号时,我们需要检查匹配串 s 中的不同后缀,以判断它们是否能匹配模式串剩余的...原创 2020-03-12 19:51:19 · 285 阅读 · 0 评论 -
【LeetCode刷题记录】9. 回文数
题目描述:题解:思路比较简单,引用官方题解:bool isPalindrome(int x) { if (x < 0 || (x % 10 == 0 && x != 0)) return false; int reverted_num = 0; while (x > reverted_num) { reverted_num = reverted_num...原创 2020-03-10 12:44:15 · 90 阅读 · 0 评论 -
【LeetCode刷题记录】8. 字符串转换整数 (atoi)
题目描述:题解:思路比较简单,这样写代码比较简洁:int myAtoi(string str) { int len = int(str.size()); int rst = 0; int sign = 0; bool started = false; for (int i = 0; i < len; i++) { if (str[i] == ' ' &&...原创 2020-03-10 12:18:49 · 145 阅读 · 0 评论 -
【LeetCode刷题记录】7. 整数反转
题目描述:题解:思路简单,注意溢出就可以了(-2147483648, 2147483647)。int reverse(int x) { int rst = 0; while (x != 0) { int pop = x % 10; x /= 10; if (rst > INT32_MAX / 10 || (rst == INT32_MAX / 10 &&am...原创 2020-03-10 10:58:09 · 115 阅读 · 0 评论 -
【LeetCode刷题记录】6. Z 字形变换
题目描述:题解:原创 2020-03-10 10:48:42 · 101 阅读 · 0 评论 -
【LeetCode刷题记录】5. 最长回文子串
题目描述:题解:一、暴力破解(时间复杂度:O(n3),空间复杂度:O(1),超出时间限制(TLE))BF方法的思路比较简单,逐个检查所有的子字符串,看它是否是回文子串。二、中心扩展算法逐字符访问,以当前字符(奇数)或当前和下一字符(偶数)为中心,向两边扩展,检查是否为回文。共有n+n-1个中心。int expendaroundcenter(string s, int left, in...原创 2020-03-09 20:31:20 · 116 阅读 · 0 评论 -
【LeetCode刷题记录】4. 寻找两个有序数组的中位数
题目描述:一个最简单、最容易想到的方法是:将两个数组排序、存入同一个vector,计算中位数,如:double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int n = nums1.size(); int m = nums2.size(); //vector&...原创 2020-03-07 19:32:20 · 97 阅读 · 0 评论 -
【LeetCode刷题记录】3. 无重复字符的最长子串
题目描述:题解:一、暴力破解(时间复杂度:O(n3),空间复杂度:O(min(n,m)),超出时间限制(TLE)) BF方法的思路比较简单,逐个检查所有的子字符串,看它是否不含有重复的字符。取不重复子字符串中长度最大的那个作为结果输出。二、双指针滑动窗口(时间复杂度:O(n2),空间复杂度:O(1))int lengthOfLongestSubstringSlide(string s)...原创 2020-03-05 20:22:05 · 196 阅读 · 0 评论 -
【LeetCode刷题记录】2. 两数相加
题目描述:单链表定义:struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};打印链表:正序:void printListNode(ListNode* ln) { ListNode* ln_temp = ln; while (ln_temp != NULL) {...原创 2020-03-05 13:27:19 · 146 阅读 · 0 评论 -
【LeetCode刷题记录】1. 两数之和
题目描述:题解:一、暴力破解vector<int> twoSumBF(vector<int>& nums, int target) { //brute force for (int i = 0; i < nums.size(); i++) { int complement = target - nums[i]; for (int j = 0; ...原创 2020-03-05 12:42:25 · 112 阅读 · 0 评论