├── .gitignore ├── LICENSE ├── README.md ├── bin └── commit_workflow.js ├── chenxinlong ├── assets │ ├── w10_progress.png │ ├── w11_progress.png │ ├── w12_progress.png │ ├── w13_progress.png │ ├── w14_progress.png │ ├── w15_progress.png │ ├── w1_progress.png │ ├── w2_progress.png │ ├── w3_progress.png │ ├── w4_progress.png │ ├── w5_progress.png │ ├── w6_progress.png │ ├── w7_progress.png │ ├── w8_progress.png │ └── w9_progress.png ├── readMe.md ├── week1.md ├── week10.md ├── week11.md ├── week12.md ├── week13.md ├── week14.md ├── week15.md ├── week2.md ├── week3.md ├── week4.md ├── week5.md ├── week6.md ├── week7.md ├── week8.md └── week9.md ├── demo ├── 2019-10-28 │ ├── leetcode1.md │ └── progress.jpeg ├── 2019-11-04 │ └── leetcode2.md └── 2019-11-11 │ └── leetcode3.md ├── huyang ├── 1.two-sum.js ├── 100.same-tree.js ├── 101.symmetric-tree.js ├── 102.binary-tree-level-order-traversal.js ├── 103.binary-tree-zigzag-level-order-traversal.js ├── 107.binary-tree-level-order-traversal-ii.js ├── 11.container-with-most-water.js ├── 110.balanced-binary-tree.js ├── 112.path-sum.js ├── 118.pascals-triangle.js ├── 119.pascals-triangle-ii.js ├── 12.integer-to-roman.js ├── 121.best-time-to-buy-and-sell-stock.js ├── 122.best-time-to-buy-and-sell-stock-ii.js ├── 125.valid-palindrome.js ├── 13.roman-to-integer.js ├── 130.surrounded-regions.js ├── 136.single-number.js ├── 14.longest-common-prefix.js ├── 144.binary-tree-preorder-traversal.js ├── 145.binary-tree-postorder-traversal.js ├── 15.3-sum.js ├── 16.3-sum-closest.js ├── 165.compare-version-numbers.js ├── 17.letter-combinations-of-a-phone-number.js ├── 19.remove-nth-node-from-end-of-list.js ├── 2.add-two-numbers.js ├── 20.valid-parentheses.js ├── 20191101第一周.png ├── 20191110第二周.png ├── 20191115第三周.png ├── 20191123第四周.png ├── 20191129第五周.png ├── 20191207第六周.png ├── 20191215第七周.png ├── 20191220第八周.png ├── 20191229第九周.png ├── 20200112第十一周.png ├── 20200119第十二周.png ├── 21.merge-two-sorted-lists.js ├── 22.generate-parentheses.js ├── 23.merge-k-sorted-lists.js ├── 24.swap-nodes-in-pairs.js ├── 25.reverse-nodes-in-k-group.js ├── 26.remove-duplicates-from-sorted-array.js ├── 27.remove-element.js ├── 28.implement-str-str.js ├── 29.divide-two-integers.js ├── 3.longest-substring-without-repeating-characters.js ├── 30.substring-with-concatenation-of-all-words.js ├── 31.next-permutation.js ├── 32.longest-valid-parentheses.js ├── 33.search-in-rotated-sorted-array.js ├── 34.find-first-and-last-position-of-element-in-sorted-array.js ├── 35.search-insert-position.js ├── 36.valid-sudoku.js ├── 38.count-and-say.js ├── 4.median-of-two-sorted-arrays.js ├── 41.first-missing-positive.js ├── 43.multiply-strings.js ├── 46.permutations.js ├── 47.permutations-ii.js ├── 48.rotate-image.js ├── 49.group-anagrams.js ├── 5.longest-palindromic-substring.js ├── 50.pow-x-n.js ├── 53.maximum-subarray.js ├── 54.spiral-matrix.js ├── 55.jump-game.js ├── 56.merge-intervals.js ├── 57.insert-interval.js ├── 58.length-of-last-word.js ├── 59.spiral-matrix-ii.js ├── 6.zig-zag-conversion.js ├── 60.permutation-sequence.js ├── 61.rotate-list.js ├── 62.unique-paths.js ├── 66.plus-one.js ├── 67.add-binary.js ├── 69.sqrt-x.js ├── 7.reverse-integer.js ├── 70.climbing-stairs.js ├── 73.set-matrix-zeroes.js ├── 74.search-matrix.js ├── 75.sort-colors.js ├── 77.combinations.js ├── 771.jewels-and-stones.js ├── 78.subsets.js ├── 8.string-to-integer-atoi.js ├── 80.remove-duplicates-from-sorted-array-ii.js ├── 81.search-in-rotated-sorted-array-ii.js ├── 82.remove-duplicates-from-sorted-list-ii.js ├── 83.remove-duplicates-from-sorted-list.js ├── 86.partition-list.js ├── 88.merge-sorted-array.js ├── 9.palindrome-number.js ├── 90.subsets-ii.js ├── 92.reverse-linked-list-ii.js ├── 94.binary-tree-inorder-traversal.js ├── 98.validate-binary-search-tree.js └── readMe.md ├── liuxionghui ├── 01.第一周 │ ├── 2019-10-30 │ │ ├── 1. 两数之和.js │ │ └── Snipaste_2019-10-30_11-51-10.png │ ├── 2019-11-02 │ │ ├── 7.整数反转.js │ │ └── Snipaste_2019-11-02_11-54-40.png │ ├── 2019-11-03 │ │ ├── 9.回文数.js │ │ └── Snipaste_2019-11-03_15-57-15.png │ └── Snipaste_2019-11-03_22-34-28.png ├── 02.第二周 │ ├── 2019-11-05 │ │ ├── 13. 罗马数字转整数.js │ │ └── Snipaste_2019-11-05_17-03-23.png │ ├── 2019-11-07 │ │ ├── 14.最长公共前缀.js │ │ └── Snipaste_2019-11-07_13-07-32.png │ ├── 2019-11-09 │ │ ├── 20.有效的扣号.js │ │ └── Snipaste_2019-11-09_22-11-35.png │ ├── 2019-11-10 │ │ ├── 21.合并两个有序链表.js │ │ └── Snipaste_2019-11-10_20-16-35.png │ └── Snipaste_2019-11-10_20-17-39.png ├── 03.第三周 │ ├── 2019-11-12 │ │ ├── 26. 删除排序数组中的重复项.js │ │ └── Snipaste_2019-11-12_16-03-55.png │ ├── 2019-11-14 │ │ ├── 27. 移除元素.js │ │ └── Snipaste_2019-11-14_11-15-04.png │ ├── 2019-11-17 │ │ ├── 28. 实现 strStr().js │ │ └── Snipaste_2019-11-17_16-20-51.png │ └── Snipaste_2019-11-17_16-21-37.png ├── 04.第四周 │ ├── 2019-11-25 │ │ ├── 3. 无重复字符的最长子串.js │ │ └── Snipaste_2019-11-25_13-58-52.png │ ├── 2019-11-27 │ │ ├── 5. 最长回文子串.js │ │ └── Snipaste_2019-11-27_14-08-28.png │ └── Snipaste_2019-11-27_13-55-56.png ├── 05.第五周 │ ├── 2019-11-30 │ │ ├── 15. 三数之和.js │ │ └── Snipaste_2019-11-30_13-52-06.png │ ├── 2019-12-01 │ │ ├── 16. 最接近的三数之和.js │ │ └── Snipaste_2019-12-01_13-55-20.png │ └── Snipaste_2019-12-01_14-08-52.png ├── 06.第六周 │ ├── 2019-12-07 │ │ ├── 17. 电话号码的字母组合.js │ │ └── Snipaste_2019-12-07_14-02-27.png │ ├── 2019-12-08 │ │ ├── 18. 四数之和.js │ │ └── Snipaste_2019-12-08_18-05-08.png │ └── Snipaste_2019-12-08_18-05-34.png ├── 07.第七周 │ ├── 2019-12-14 │ │ ├── 35. 搜索插入位置.js │ │ └── Snipaste_2019-12-14_14-29-23.png │ ├── 2019-12-15 │ │ ├── 38. 报数.js │ │ └── Snipaste_2019-12-15_16-33-17.png │ └── Snipaste_2019-12-17_00-34-27.png ├── 08.第八周 │ ├── 2019-12-21 │ │ ├── 46. 全排列.js │ │ └── Snipaste_2019-12-21_15-28-34.png │ ├── 2019-12-22 │ │ ├── 48. 旋转图像.js │ │ └── Snipaste_2019-12-22_21-37-28.png │ └── Snipaste_2019-12-23_21-37-53.png ├── 09.第九周 │ ├── 2019-12-28 │ │ ├── 53. 最大子序和.js │ │ └── Snipaste_2019-12-28_20-41-52.png │ ├── 2019-12-29 │ │ ├── 54. 螺旋矩阵.js │ │ └── Snipaste_2019-12-29_20-45-40.png │ └── Snipaste_2019-12-29_20-46-15.png └── readMe.md ├── lvjian └── readMe.md ├── package-lock.json ├── package.json ├── plan.md ├── shenjunhong ├── 1332.6和9组合最大的数字.js ├── 595大的国家.js ├── 620完美数.js ├── 709转换成小写.js ├── N皇后#52.js ├── TinyUrl的加密与解密#535.js ├── ip地址无效化#1108.js ├── readMe.md ├── test.js ├── twoSub#02.js ├── x的平方根#69.js ├── 三数之和#15.js ├── 两两交换链表#24.js ├── 两数之和#01.js ├── 两数相除#29.js ├── 二叉树的最大深度#104.js ├── 二进制求和#67.js ├── 保持城市天际#870.js ├── 创建多维数组.js ├── 删去字符串中的元音#1199.js ├── 删除排序数组中的重复项#26.js.js ├── 删除链表的倒数第N个节点#19.js ├── 加一#66.js ├── 反转字符串#344.js ├── 合并两个有序链表#21.js ├── 合并有序链表#21.js ├── 四数之和#18.js ├── 回文数#09.js ├── 字符串转换整数#8.js ├── 宝石与石头#771.js ├── 实现strStr()#28.js ├── 报数#38.js ├── 括号生成#22.js ├── 排列m个元素n数组.js ├── 搜索插入位置#35.js ├── 整数反转#07.js ├── 整数转罗马数字#12.js ├── 无效的最长字符串#03.js ├── 最后一个单词的长度#58.js ├── 最大序列之和#.js ├── 最接近的三数之和#16.js ├── 最长公共前缀#14.js ├── 最长回文子串#05.js ├── 有效的括号#20.js ├── 有趣的电影#620.sql ├── 爬楼梯#70.js ├── 猜数字#lcp1.js ├── 电话号码的字母组合#17.js ├── 盛最多水的容器#11.js ├── 移除元素#27.js ├── 组合#77.js ├── 组合总和#39.js ├── 组合总和#40.js ├── 罗马数字转整数#13.js ├── 翻转图像#832.js └── 进度截图 │ ├── 12.16-12.22.jpg │ ├── 2019.12.29.png │ └── 时间轴-做题数.jpg ├── tanxu ├── 100相同的树.js ├── 101对称二叉树.js ├── 102二叉树得层次遍历.js ├── 103二叉树的锯齿形层次遍历.js ├── 104二叉树的最大深度.js ├── 105从前序与中序遍历序列构造二叉树.js ├── 106从中序与后序遍历序列构造二叉树.js ├── 107二叉树的层次遍历 II.js ├── 108将有序数组转换为二叉搜索树.js ├── 109有序链表转换二叉搜索树.js ├── 10正则表达式匹配.js ├── 110平衡二叉树.js ├── 111二叉树的最小深度.js ├── 112路径总和.js ├── 113路径总和 II.js ├── 114二叉树展开为链表.js ├── 116填充每个节点的下一个右侧节点指针.js ├── 117填充每个节点的下一个右侧节点指针 II.js ├── 11盛最多水的容器.js ├── 11盛最多的水.md ├── 124二叉树中的最大路径和.js ├── 12整数转罗马数字.js ├── 12整数转罗马数字.md ├── 13罗马数字转整数.js ├── 145二叉树的后序遍历(非递归).js ├── 145二叉树的后序遍历.js ├── 145二叉树的后序遍历.md ├── 14最长公共前缀.js ├── 15三数之和.js ├── 15三数之和.md ├── 16最接近的三数之和.js ├── 16最接近的三数之和.md ├── 17电话号码的字母组合.js ├── 17电话号码的字母组合.md ├── 18四数之和.js ├── 18四数之和.md ├── 19删除链表的倒数第N个节点.js ├── 19删除链表的倒数第N个节点.md ├── 1两数之和.js ├── 20有效的括号.js ├── 20有效的括号.md ├── 21合并两个有序链表.js ├── 21合并两个有序链表.md ├── 22括号生成.js ├── 22括号生成.md ├── 23合并K个排序链表.js ├── 23合并K个排序链表.md ├── 24两两交换链表中的节点.js ├── 24两两交换链表中的节点.md ├── 25K 个一组翻转链表.js ├── 25K 个一组翻转链表.md ├── 26 删除排序数组中的重复项.js ├── 27移除元素.js ├── 28实现 strStr().js ├── 28实现 strStr().md ├── 29两数相除.js ├── 29两数相除.md ├── 2两数相加.js ├── 30串联所有单词的子串.js ├── 30串联所有单词的子串.md ├── 32最长有效括号.js ├── 32最长有效括号.md ├── 33搜索旋转排序数组.js ├── 33搜索旋转排序数组.md ├── 34在排序数组中查找元素的第一个和最后一个位置.js ├── 34在排序数组中查找元素的第一个和最后一个位置.md ├── 35搜索插入位置.js ├── 35搜索插入位置.md ├── 36有效的数独.js ├── 36有效的数独.md ├── 37解数独.js ├── 37解数独.md ├── 38报数.js ├── 38报数.md ├── 39组合总和.js ├── 39组合总和.md ├── 3无重复字符的最长子串.js ├── 40组合总和 II.js ├── 40组合总和2.md ├── 41.缺失的第一个正数.md ├── 415字符串相加.js ├── 415字符串相加.md ├── 41缺失的第一个正数.js ├── 42接雨水.js ├── 42接雨水.md ├── 43字符串相乘.js ├── 43字符串相乘.md ├── 44通配符匹配.js ├── 45跳跃游戏 II.js ├── 45跳跃游戏 II.md ├── 46全排列.js ├── 46全排列.md ├── 47全排列 II.js ├── 47全排列II.md ├── 48旋转图像.js ├── 48旋转图像.md ├── 49字母异位词分组.js ├── 49字母异位词分组.md ├── 4寻找两个有序数组的中位数.js ├── 50 Pow(x, n).js ├── 51N皇后.js ├── 51N皇后.md ├── 52N皇后 II.js ├── 53最大子序和.js ├── 54螺旋矩阵.js ├── 55跳跃游戏.js ├── 56合并区间.js ├── 57插入区间.js ├── 58最后一个单词的长度.js ├── 59螺旋矩阵 II.js ├── 5最长回文子串.js ├── 5最长回文子串.md ├── 6Z 字形变换.js ├── 6Z 字形变换.md ├── 7整数反转.js ├── 7整数反转.md ├── 8字符串转换整数 (atoi).js ├── 8字符串转换整数 (atoi).md ├── 94二叉树的中序遍历.js ├── 94二叉树的中序遍历.md ├── 95不同的二叉搜索树 II.js ├── 95不同的二叉搜索树 II.md ├── 96 不同的二叉搜索树.md ├── 96不同的二叉搜索树.js ├── 98验证二叉搜索树.js ├── 98验证二叉搜索树.md ├── 99恢复二叉搜索树.js ├── 99恢复二叉搜索树.md ├── 9回文数.js ├── 9回文数.md ├── image │ ├── 145.jpeg │ ├── 32.jpg │ ├── 39.jpeg │ ├── 48.jpg │ └── 54.jpeg ├── 排序算法.js ├── 第一周进度.jpg ├── 第七周进度截图.png ├── 第三周进度截图.png ├── 第九周进度截图.jpg ├── 第二周进度.png ├── 第五周进度.png ├── 第八周进度截图.jpg ├── 第六周进度截图.png ├── 第十一周进度截图.jpg ├── 第十三周进度截图.jpg ├── 第十二周进度.jpg ├── 第十周进度截图.jpg └── 第四周进度截图.jpg ├── tanxuan ├── 1.两数之和.js ├── 100.相同的树.js ├── 101.对称二叉树.js ├── 104.二叉树的最大深度.js ├── 11.盛最多水的容器.js ├── 118.杨辉三角.js ├── 119.杨辉三角-ii.js ├── 12.整数转罗马数字.js ├── 121.买卖股票的最佳时机.js ├── 122.买卖股票的最佳时机-ii.js ├── 125.验证回文串.js ├── 13.罗马数字转整数.js ├── 136.只出现一次的数字.js ├── 14.最长公共前缀.js ├── 15.三数之和.js ├── 16.最接近的三数之和.js ├── 17.电话号码的字母组合.js ├── 18.四数之和.js ├── 19.删除链表的倒数第n个节点.js ├── 2.两数相加.js ├── 20.有效的括号.js ├── 21.合并两个有序链表.js ├── 22.括号生成.js ├── 23.合并k个排序链表.js ├── 24.两两交换链表中的节点.js ├── 25.k-个一组翻转链表.js ├── 26.删除排序数组中的重复项.js ├── 27.移除元素.js ├── 28.实现-str-str.js ├── 29.两数相除.js ├── 3.无重复字符的最长子串.js ├── 31.下一个排列.js ├── 33.搜索旋转排序数组.js ├── 34.在排序数组中查找元素的第一个和最后一个位置.js ├── 35.搜索插入位置.js ├── 38.报数.js ├── 4.寻找两个有序数组的中位数.js ├── 43.字符串相乘.js ├── 48.旋转图像.js ├── 49.字母异位词分组.js ├── 5.最长回文子串.js ├── 53.最大子序和.js ├── 54.螺旋矩阵.js ├── 56.合并区间.js ├── 58.最后一个单词的长度.js ├── 59.螺旋矩阵-ii.js ├── 6.z-字形变换.js ├── 61.旋转链表.js ├── 62.不同路径.js ├── 66.加一.js ├── 67.二进制求和.js ├── 69.x-的平方根.js ├── 7.整数反转.js ├── 70.爬楼梯.js ├── 72.编辑距离.js ├── 73.矩阵置零.js ├── 8.字符串转换整数-atoi.js ├── 80.删除排序数组中的重复项-ii.js ├── 81.搜索旋转排序数组-ii.js ├── 83.删除排序链表中的重复元素.js ├── 88.合并两个有序数组.js ├── 9.回文数.js ├── progress.md └── readMe.md ├── wangchong ├── 2019-11-03.jpg ├── 2019-11-10.jpg ├── 2019-11-17.jpg ├── 2019-11-24.png ├── 2019-12-01.jpg ├── 2019-12-08.jpg ├── 2019-12-15.jpg ├── 2019-12-22.jpg ├── 2019-12-29.jpg ├── 2020-01-03.jpg ├── 2020-01-12.jpg ├── 2020-01-19.jpg └── readMe.md ├── wangxianming ├── images │ ├── WX20191103-230353@2x.png │ └── WX20191110-162720@2x.png ├── progress.png └── readMe.md ├── weixing ├── 20191215.png ├── WX20191222.png ├── WX20191229.png ├── WX20200105.png ├── WX20200112.png ├── WX20200119.png ├── WX20200202.png └── readMe.md ├── wuhaoran ├── 11.盛最多水的容器.md ├── 12.整数转罗马数字.md ├── 121. 买卖股票的最佳时机.md ├── 13.罗马数字转整数.md ├── 14.最长公共前缀.md ├── 17.电话号码的字母组合.md ├── 20. 有效的括号.md ├── 20191024.png ├── 20191103.png ├── 20191110.png ├── 20191117.png ├── 20191201.png ├── 20191208.png ├── 21. 合并两个有序链表.md ├── 26. 删除排序数组中的重复项.md ├── 27. 移除元素.md ├── 53.最大子序和.md ├── 70.爬楼梯.md └── readMe.md ├── xianweiwu ├── 2019-10-28 │ ├── leetcode1.md │ ├── leetcode3.md │ ├── leetcode7.md │ ├── leetcode8.md │ ├── leetcode9.md │ ├── progress.jpg │ ├── result1-1.jpg │ ├── result1-2.jpg │ ├── result3-1.jpg │ ├── result3-2.jpg │ ├── result7-1.jpg │ ├── result7-2.jpg │ ├── result8-1.jpg │ ├── result9-1.jpg │ └── result9-2.jpg ├── 2019-11-04 │ ├── leetcode13.md │ ├── leetcode14.md │ ├── leetcode2.md │ ├── leetcode20.md │ ├── progress.jpg │ ├── result13-1.jpg │ ├── result14-1.jpg │ ├── result15-1.jpg │ └── result2-1.jpg ├── 2019-11-11 │ ├── leetcode22.md │ ├── leetcode23.md │ ├── leetcode24.md │ ├── leetcode26.md │ ├── leetcode27.md │ ├── leetcode28.md │ ├── leetcode29.md │ ├── leetcode4.md │ ├── progress.jpg │ ├── result22-1.jpg │ ├── result23-1.jpg │ ├── result24-1.jpg │ ├── result26-1.jpg │ ├── result27-1.jpg │ ├── result28-1.jpg │ ├── result29-1.jpg │ └── result4-1.jpg ├── 2019-11-18 │ ├── leetcode31.md │ ├── leetcode35.md │ ├── progress.jpg │ ├── result31-1.jpg │ └── result35-1.jpg ├── 2019-11-25 │ ├── leetcode41.md │ ├── leetcode49.md │ ├── progress.jpg │ ├── result41-1.jpg │ └── result49-1.jpg ├── 2019-12-02 │ ├── leetcode13.md │ ├── leetcode38.md │ ├── leetcode53.md │ ├── leetcode58.md │ ├── progress.jpg │ ├── result13-1.jpg │ ├── result38-1.jpg │ ├── result53-1.jpg │ ├── result58-1.jpg │ ├── result58-2.jpg │ ├── result58-3.jpg │ └── result58-4.jpg ├── 2019-12-09 │ ├── leetcode61.md │ ├── leetcode64.md │ ├── leetcode65.md │ ├── leetcode66.md │ ├── progress.jpg │ ├── result61-1.jpg │ ├── result64-1.jpg │ ├── result65-1.jpg │ └── result66-1.jpg ├── 2019-12-16 │ ├── leetcode71.md │ ├── leetcode73.md │ ├── progress.jpg │ ├── result71-1.jpg │ └── result73-1.jpg ├── 2019-12-23 │ ├── leetcode74.md │ ├── progress.jpg │ ├── result74-1.jpg │ └── result74-2.jpg ├── 2019-12-30 │ ├── leetcode92.md │ ├── progress.jpg │ └── result92-1.jpg ├── 2020-01-06 │ ├── leetcode19.md │ ├── progress.jpg │ └── result19-1.jpg ├── 2020-01-13 │ ├── leetcode125.md │ ├── progress.jpg │ └── result125-1.jpg ├── 2020-01-20 │ ├── leetcode136.md │ ├── progress.jpg │ └── result136-1.jpg ├── 2020-02-03 │ ├── leetcode144.md │ ├── leetcode145.md │ ├── progress.jpg │ ├── result144-1.jpg │ └── result145-1.jpg └── 2020-02-10 │ ├── leetcode134.md │ ├── progress.jpg │ └── result134-1.jpg ├── xiaoen ├── 2019-10-28.png ├── 2019-11-04.png ├── 2019-11-11.png ├── 2019-11-18.png ├── 2019-11-25.png ├── 2019-12-02.png ├── 2019-12-09.png └── readMe.md └── yangchenjing ├── 11.盛最多水的容器.md ├── 12.整数转罗马数字.md ├── 121.买卖股票的最佳时机.md ├── 122.买卖股票的最佳时机 II.md ├── 125.验证回文串.md ├── 13.罗马数字转整数.md ├── 136.只出现一次的数字.md ├── 137.只出现一次的数字 II.md ├── 14.最长公共前缀.md ├── 141.环形链表.md ├── 144.二叉树的前序遍历.md ├── 145.二叉树的后序遍历.md ├── 15.三数之和.md ├── 167.两数之和 II - 输入有序数组.md ├── 169.多数元素.md ├── 189.旋转数组.md ├── 191.位1的个数.md ├── 1、两数之和.md ├── 20.有效的括号.md ├── 26.删除排序数组中的重复项.md ├── 27.移除元素.md ├── 28.实现 strStr().md ├── 3.无重复字符串的最长子串.md ├── 35.搜索插入位置.md ├── 4.寻找两个有序数组的中位数.md ├── 53.最大子序和.md ├── 58.最后一个单词的长度.md ├── 66.加一.md ├── 69.x 的平方根.md ├── 7.整数反转.md ├── 8. 字符串转换整数 (atoi).md ├── 84.柱状图中最大的矩形.md ├── 9.回文数.md ├── 94.二叉树的中序遍历.md ├── progress.md └── readMe.md /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .idea/ 3 | .DS_Store 4 | bin -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # leetcode 2 | 3 | ## How to use? 4 | 5 | - `npm i` // install package 6 | - `npm run commit` // commit file. This command includes `git add .` and `git commit` commands 7 | - `git push` //push file to repository 8 | -------------------------------------------------------------------------------- /chenxinlong/assets/w10_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/chenxinlong/assets/w10_progress.png -------------------------------------------------------------------------------- /chenxinlong/assets/w11_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/chenxinlong/assets/w11_progress.png -------------------------------------------------------------------------------- /chenxinlong/assets/w12_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/chenxinlong/assets/w12_progress.png -------------------------------------------------------------------------------- /chenxinlong/assets/w13_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/chenxinlong/assets/w13_progress.png -------------------------------------------------------------------------------- /chenxinlong/assets/w14_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/chenxinlong/assets/w14_progress.png -------------------------------------------------------------------------------- /chenxinlong/assets/w15_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/chenxinlong/assets/w15_progress.png -------------------------------------------------------------------------------- /chenxinlong/assets/w1_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/chenxinlong/assets/w1_progress.png -------------------------------------------------------------------------------- /chenxinlong/assets/w2_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/chenxinlong/assets/w2_progress.png -------------------------------------------------------------------------------- /chenxinlong/assets/w3_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/chenxinlong/assets/w3_progress.png -------------------------------------------------------------------------------- /chenxinlong/assets/w4_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/chenxinlong/assets/w4_progress.png -------------------------------------------------------------------------------- /chenxinlong/assets/w5_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/chenxinlong/assets/w5_progress.png -------------------------------------------------------------------------------- /chenxinlong/assets/w6_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/chenxinlong/assets/w6_progress.png -------------------------------------------------------------------------------- /chenxinlong/assets/w7_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/chenxinlong/assets/w7_progress.png -------------------------------------------------------------------------------- /chenxinlong/assets/w8_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/chenxinlong/assets/w8_progress.png -------------------------------------------------------------------------------- /chenxinlong/assets/w9_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/chenxinlong/assets/w9_progress.png -------------------------------------------------------------------------------- /chenxinlong/readMe.md: -------------------------------------------------------------------------------- 1 | 2 | | date | week | 3 | |---|---| 4 | |2019-10-28 ~ 2019-11-03 | [week 1.md](week1.md)| 5 | |2019-11-04 ~ 2019-11-10 | [week 2.md](week2.md)| 6 | |2019-11-11 ~ 2019-11-17 | [week 3.md](week3.md)| 7 | |2019-11-18 ~ 2019-11-24 | [week 4.md](week4.md)| 8 | |2019-11-25 ~ 2019-12-01 | [week 5.md](week5.md)| 9 | |2019-12-01 ~ 2019-12-08 | [week 6.md](week6.md)| 10 | |2019-12-09 ~ 2019-12-15 | [week 7.md](week7.md)| 11 | |2019-12-16 ~ 2019-12-22 | [week 8.md](week8.md)| 12 | |2019-12-23 ~ 2019-12-29 | [week 9.md](week9.md)| 13 | |2019-12-30 ~ 2020-01-06 | [week 10.md](week10.md)| 14 | |2020-01-07 ~ 2020-01-12 | [week 11.md](week11.md)| 15 | |2020-01-12 ~ 2020-01-19 | [week 12.md](week12.md)| 16 | |2020-01-20 ~ 2020-02-02 | [week 13.md](week13.md)| 17 | |2020-02-02 ~ 2020-02-09 | [week 14.md](week14.md)| 18 | |2020-02-09 ~ 2020-02-16 | [week 15.md](week15.md)| -------------------------------------------------------------------------------- /chenxinlong/week1.md: -------------------------------------------------------------------------------- 1 | # Week 1 2 | 3 | 时间:2019-10-28 ~ 2019-11-03 4 | 完成情况:1,2,3,4,6,7,8,9 5 | 进度:如下图 6 | 7 | ![](assets/w1_progress.png) 8 | 9 | # List 10 | 11 | | 题号 | 笔记 | 12 | |---|---| 13 | | 1 | [Two Sum ](https://github.com/chenxinlong/leetcode/blob/master/algs/1.go) | 14 | | 2 | [Add Two Numbers](https://github.com/chenxinlong/leetcode/blob/master/algs/2.go)| 15 | | 3 | [Longest Substring Without Repeating Characters](https://github.com/chenxinlong/leetcode/blob/master/algs/3.go)| 16 | | 4 | [Median of Two Sorted Arrays](https://github.com/chenxinlong/leetcode/blob/master/algs/4.go)| 17 | | 6 | [ZigZag Conversion](https://github.com/chenxinlong/leetcode/blob/master/algs/6.go)| 18 | | 7 | [Reverse Integer](https://github.com/chenxinlong/leetcode/blob/master/algs/7.go)| 19 | | 8 | [String to Integer (atoi)](https://github.com/chenxinlong/leetcode/blob/master/algs/8.go)| 20 | | 9 | [Palindrome Number](https://github.com/chenxinlong/leetcode/blob/master/algs/9.go)| -------------------------------------------------------------------------------- /chenxinlong/week10.md: -------------------------------------------------------------------------------- 1 | # Week 10 2 | 3 | 时间:2019-12-30 ~ 2020-01-06 4 | 完成情况:121, 122 5 | 进度:如下图 6 | 7 | ![](assets/w10_progress.png) 8 | 9 | # List 10 | 11 | | 题号 | 笔记 | 12 | |---|---| 13 | | 121 | [Best Time to Buy and Sell Stock](https://github.com/chenxinlong/leetcode/blob/master/algs/121.go) 14 | | 122 | [Best Time to Buy and Sell Stock II](https://github.com/chenxinlong/leetcode/blob/master/algs/122.go) -------------------------------------------------------------------------------- /chenxinlong/week11.md: -------------------------------------------------------------------------------- 1 | # Week 11 2 | 3 | 时间:2020-01-07 ~ 2020-01-12 4 | 完成情况:92,141 5 | 进度:如下图 6 | 7 | ![](assets/w11_progress.png) 8 | 9 | # List 10 | 11 | | 题号 | 笔记 | 12 | |---|---| 13 | | 92 | [Reverse Linked List II](https://github.com/chenxinlong/leetcode/blob/master/algs/92.go) 14 | | 141 | [Linked List Cycle](https://github.com/chenxinlong/leetcode/blob/master/algs/141.go) -------------------------------------------------------------------------------- /chenxinlong/week12.md: -------------------------------------------------------------------------------- 1 | # Week 12 2 | 3 | 时间:2020-01-12 ~ 2020-01-19 4 | 完成情况:102,110 5 | 进度:如下图 6 | 7 | ![](assets/w12_progress.png) 8 | 9 | # List 10 | 11 | | 题号 | 笔记 | 12 | |---|---| 13 | | 102 | [Binary Tree Level Order Traversal](https://github.com/chenxinlong/leetcode/blob/master/algs/102.go) 14 | | 110 | [Balanced Binary Tree](https://github.com/chenxinlong/leetcode/blob/master/algs/110.go) -------------------------------------------------------------------------------- /chenxinlong/week13.md: -------------------------------------------------------------------------------- 1 | # Week 13 2 | 3 | 时间:2020-01-20 ~ 2020-02-02(2周合一周) 4 | 完成情况:1108,1313 5 | 进度:如下图 6 | 7 | ![](assets/w13_progress.png) 8 | 9 | # List 10 | 11 | | 题号 | 笔记 | 12 | |---|---| 13 | | 1108 | [Defanging an IP Address](https://github.com/chenxinlong/leetcode/blob/master/algs/1108.go) 14 | | 1313 | [Decompress Run-Length Encoded List](https://github.com/chenxinlong/leetcode/blob/master/algs/1313.go) -------------------------------------------------------------------------------- /chenxinlong/week14.md: -------------------------------------------------------------------------------- 1 | # Week 14 2 | 3 | 时间:2020-02-02 ~ 2020-02-09 4 | 完成情况:1281,1295 5 | 进度:如下图 6 | 7 | ![](assets/w14_progress.png) 8 | 9 | # List 10 | 11 | | 题号 | 笔记 | 12 | |---|---| 13 | | 1281 | [Subtract the Product and Sum of Digits of an Integer](https://github.com/chenxinlong/leetcode/blob/master/algs/1281.go) 14 | | 1295 | [Find Numbers with Even Number of Digits](https://github.com/chenxinlong/leetcode/blob/master/algs/1295.go) -------------------------------------------------------------------------------- /chenxinlong/week15.md: -------------------------------------------------------------------------------- 1 | # Week 15 2 | 3 | 时间:2020-02-09 ~ 2020-02-16 4 | 1221,1290 5 | 进度:如下图 6 | 7 | ![](assets/w15_progress.png) 8 | 9 | # List 10 | 11 | | 题号 | 笔记 | 12 | |---|---| 13 | | 1221 | [Split a String in Balanced Strings](https://github.com/chenxinlong/leetcode/blob/master/algs/1221.go) 14 | | 1290 | [Convert Binary Number in a Linked List to Integer](https://github.com/chenxinlong/leetcode/blob/master/algs/1290.go) -------------------------------------------------------------------------------- /chenxinlong/week2.md: -------------------------------------------------------------------------------- 1 | # Week 2 2 | 3 | 时间:2019-11-04 ~ 2019-11-10 4 | 完成情况:11,12,13,14,19,20 5 | 进度:如下图 6 | 7 | ![](assets/w2_progress.png) 8 | 9 | # List 10 | 11 | | 题号 | 笔记 | 12 | |---|---| 13 | | 11 | [Container With Most Water](https://github.com/chenxinlong/leetcode/blob/master/algs/11.go) | 14 | | 12 | [Integer to Roman](https://github.com/chenxinlong/leetcode/blob/master/algs/12.go)| 15 | | 13 | [Roman to Integer](https://github.com/chenxinlong/leetcode/blob/master/algs/13.go)| 16 | | 14 | [Longest Common Prefix](https://github.com/chenxinlong/leetcode/blob/master/algs/14.go)| 17 | | 19 | [Remove Nth Node From End of List ](https://github.com/chenxinlong/leetcode/blob/master/algs/19.go)| 18 | | 20 | [Valid Parentheses](https://github.com/chenxinlong/leetcode/blob/master/algs/20.go)| -------------------------------------------------------------------------------- /chenxinlong/week3.md: -------------------------------------------------------------------------------- 1 | # Week 3 2 | 3 | 时间:2019-11-11 ~ 2019-11-17 4 | 完成情况:21,26 5 | 进度:如下图 6 | 7 | ![](assets/w3_progress.png) 8 | 9 | # List 10 | 11 | | 题号 | 笔记 | 12 | |---|---| 13 | | 21 | [Merge Two Sorted Lists](https://github.com/chenxinlong/leetcode/blob/master/algs/21.go) | 14 | | 26 | [Remove Duplicates from Sorted Array](https://github.com/chenxinlong/leetcode/blob/master/algs/26.go)| -------------------------------------------------------------------------------- /chenxinlong/week4.md: -------------------------------------------------------------------------------- 1 | # Week 4 2 | 3 | 时间:2019-11-18 ~ 2019-11-24 4 | 完成情况:5,27 5 | 进度:如下图 6 | 7 | ![](assets/w4_progress.png) 8 | 9 | # List 10 | 11 | | 题号 | 笔记 | 12 | |---|---| 13 | | 5 | [Longest Palindromic Substring](https://github.com/chenxinlong/leetcode/blob/master/algs/5.go) | 14 | | 27 | [Remove Element](https://github.com/chenxinlong/leetcode/blob/master/algs/27.go)| -------------------------------------------------------------------------------- /chenxinlong/week5.md: -------------------------------------------------------------------------------- 1 | # Week 5 2 | 3 | 时间:2019-11-25 ~ 2019-12-01 4 | 完成情况:76,239 5 | 进度:如下图 6 | 7 | ![](assets/w5_progress.png) 8 | 9 | # List 10 | 11 | | 题号 | 笔记 | 12 | |---|---| 13 | | 76 | [Minimum Window Substring](https://github.com/chenxinlong/leetcode/blob/master/algs/76.go) | 14 | | 239 | [Sliding Window Maximum](https://github.com/chenxinlong/leetcode/blob/master/algs/239.go) -------------------------------------------------------------------------------- /chenxinlong/week6.md: -------------------------------------------------------------------------------- 1 | # Week 6 2 | 3 | 时间:2019-12-01 ~ 2019-12-08 4 | 完成情况:38, 53 5 | 进度:如下图 6 | 7 | ![](assets/w6_progress.png) 8 | 9 | # List 10 | 11 | | 题号 | 笔记 | 12 | |---|---| 13 | | 38 | [Count and Say](https://github.com/chenxinlong/leetcode/blob/master/algs/38.go) 14 | | 53 | [Maximum Subarray](https://github.com/chenxinlong/leetcode/blob/master/algs/53.go) -------------------------------------------------------------------------------- /chenxinlong/week7.md: -------------------------------------------------------------------------------- 1 | # Week 7 2 | 3 | 时间:2019-12-09 ~ 2019-12-15 4 | 完成情况:23, 24 5 | 进度:如下图 6 | 7 | ![](assets/w7_progress.png) 8 | 9 | # List 10 | 11 | | 题号 | 笔记 | 12 | |---|---| 13 | | 23 | [Merge k Sorted Lists](https://github.com/chenxinlong/leetcode/blob/master/algs/23.go) 14 | | 24 | [Swap Nodes in Pairs](https://github.com/chenxinlong/leetcode/blob/master/algs/24.go) -------------------------------------------------------------------------------- /chenxinlong/week8.md: -------------------------------------------------------------------------------- 1 | # Week 8 2 | 3 | 时间:2019-12-16 ~ 2019-12-22 4 | 完成情况:28, 66 5 | 进度:如下图 6 | 7 | ![](assets/w8_progress.png) 8 | 9 | # List 10 | 11 | | 题号 | 笔记 | 12 | |---|---| 13 | | 28 | [Implement strStr()](https://github.com/chenxinlong/leetcode/blob/master/algs/28.go) 14 | | 66 | [Plus one](https://github.com/chenxinlong/leetcode/blob/master/algs/66.go) -------------------------------------------------------------------------------- /chenxinlong/week9.md: -------------------------------------------------------------------------------- 1 | # Week 9 2 | 3 | 时间:2019-12-23 ~ 2019-12-29 4 | 完成情况:94, 101 5 | 进度:如下图 6 | 7 | ![](assets/w9_progress.png) 8 | 9 | # List 10 | 11 | | 题号 | 笔记 | 12 | |---|---| 13 | | 94 | [Binary Tree Inorder Traversal](https://github.com/chenxinlong/leetcode/blob/master/algs/94.go) 14 | | 101 | [Symmetric Tree](https://github.com/chenxinlong/leetcode/blob/master/algs/101.go) -------------------------------------------------------------------------------- /demo/2019-10-28/leetcode1.md: -------------------------------------------------------------------------------- 1 | ## 题目标题 2 | 3 | > 题目描述,题目描述,题目描述,题目描述,题目描述,题目描述,题目描述,题目描述,题目描述。 4 | 5 | 示例1: 6 | ```text 7 | 输入 1 8 | 输出 2 9 | ``` 10 | 示例2: 11 | ```text 12 | 输入 2 13 | 输出 3 14 | ``` 15 | 16 | - 解法1 17 | - 解题思路 18 | 1. 应该这样做 19 | 2. 然后这样做 20 | 3. 接着这样做 21 | 4. 最后得到答案 22 | 23 | - 代码 24 | ```javascript 25 | const result = 1; 26 | console.info(result); 27 | ``` 28 | 29 | - 算法分析 30 | - 时间复杂度: `O(n)` 31 | - 空间复杂度: `O(n)` 32 | - 逻辑复杂度: `O(n)` 33 | 34 | - 解法2 35 | - 解题思路 36 | 1. 应该这样做 37 | 2. 然后这样做 38 | 3. 接着这样做 39 | 4. 最后得到答案 40 | 41 | - 代码 42 | ```javascript 43 | const result = 2; 44 | console.info(result); 45 | ``` 46 | 47 | - 算法分析 48 | - 时间复杂度: `O(n)` 49 | - 空间复杂度: `O(n)` 50 | - 逻辑复杂度: `O(n)` 51 | 52 | - 总结 53 | > 遇到什么问题,或者其他什么需要多思考的,哪些部分需要学习的。 -------------------------------------------------------------------------------- /demo/2019-10-28/progress.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/demo/2019-10-28/progress.jpeg -------------------------------------------------------------------------------- /demo/2019-11-04/leetcode2.md: -------------------------------------------------------------------------------- 1 | ## 题目标题 2 | 3 | > 题目描述,题目描述,题目描述,题目描述,题目描述,题目描述,题目描述,题目描述,题目描述。 4 | 5 | 示例1: 6 | ```text 7 | 输入 1 8 | 输出 2 9 | ``` 10 | 示例2: 11 | ```text 12 | 输入 2 13 | 输出 3 14 | ``` 15 | 16 | - 解法1 17 | - 解题思路 18 | 1. 应该这样做 19 | 2. 然后这样做 20 | 3. 接着这样做 21 | 4. 最后得到答案 22 | 23 | - 代码 24 | ```javascript 25 | const result = 1; 26 | console.info(result); 27 | ``` 28 | 29 | - 算法分析 30 | - 时间复杂度: `O(n)` 31 | - 空间复杂度: `O(n)` 32 | - 逻辑复杂度: `O(n)` 33 | 34 | - 解法2 35 | - 解题思路 36 | 1. 应该这样做 37 | 2. 然后这样做 38 | 3. 接着这样做 39 | 4. 最后得到答案 40 | 41 | - 代码 42 | ```javascript 43 | const result = 2; 44 | console.info(result); 45 | ``` 46 | 47 | - 算法分析 48 | - 时间复杂度: `O(n)` 49 | - 空间复杂度: `O(n)` 50 | - 逻辑复杂度: `O(n)` 51 | 52 | - 总结 53 | > 遇到什么问题,或者其他什么需要多思考的,哪些部分需要学习的。 -------------------------------------------------------------------------------- /demo/2019-11-11/leetcode3.md: -------------------------------------------------------------------------------- 1 | ## 题目标题 2 | 3 | > 题目描述,题目描述,题目描述,题目描述,题目描述,题目描述,题目描述,题目描述,题目描述。 4 | 5 | 示例1: 6 | ```text 7 | 输入 1 8 | 输出 2 9 | ``` 10 | 示例2: 11 | ```text 12 | 输入 2 13 | 输出 3 14 | ``` 15 | 16 | - 解法1 17 | - 解题思路 18 | 1. 应该这样做 19 | 2. 然后这样做 20 | 3. 接着这样做 21 | 4. 最后得到答案 22 | 23 | - 代码 24 | ```javascript 25 | const result = 1; 26 | console.info(result); 27 | ``` 28 | 29 | - 算法分析 30 | - 时间复杂度: `O(n)` 31 | - 空间复杂度: `O(n)` 32 | - 逻辑复杂度: `O(n)` 33 | 34 | - 解法2 35 | - 解题思路 36 | 1. 应该这样做 37 | 2. 然后这样做 38 | 3. 接着这样做 39 | 4. 最后得到答案 40 | 41 | - 代码 42 | ```javascript 43 | const result = 2; 44 | console.info(result); 45 | ``` 46 | 47 | - 算法分析 48 | - 时间复杂度: `O(n)` 49 | - 空间复杂度: `O(n)` 50 | - 逻辑复杂度: `O(n)` 51 | 52 | - 总结 53 | > 遇到什么问题,或者其他什么需要多思考的,哪些部分需要学习的。 -------------------------------------------------------------------------------- /huyang/1.two-sum.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=1 lang=javascript 3 | * 4 | * [1] Two Sum 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} nums 10 | * @param {number} target 11 | * @return {number[]} 12 | */ 13 | // 两数之和 14 | var twoSum = function(nums, target) { 15 | for(let i in nums){ 16 | if(nums.indexOf(target - nums[i]) > -1 && nums.indexOf(target - nums[i]) != i){ 17 | return [i, nums.indexOf(target - nums[i])]; 18 | } 19 | } 20 | }; 21 | // @lc code=end 22 | 23 | -------------------------------------------------------------------------------- /huyang/101.symmetric-tree.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=101 lang=javascript 3 | * 4 | * [101] Symmetric Tree 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * Definition for a binary tree node. 10 | * function TreeNode(val) { 11 | * this.val = val; 12 | * this.left = this.right = null; 13 | * } 14 | */ 15 | /** 16 | * @param {TreeNode} root 17 | * @return {boolean} 18 | */ 19 | // 对称二叉树 20 | // 递归 21 | var dd = function(l, r){ 22 | if(!l && !r) return true; 23 | if(l && r && l.val == r.val){ 24 | // 左子树的左节点和右子树的右节点相等,右子树的左节点和左子树的右节点相等 25 | return dd(l.left, r.right) && dd(r.left, l.right); 26 | } else{ 27 | return false; 28 | } 29 | } 30 | var isSymmetric = function(root) { 31 | if(!root) return true; 32 | return dd(root.left, root.right); 33 | }; 34 | // @lc code=end 35 | 36 | -------------------------------------------------------------------------------- /huyang/11.container-with-most-water.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=11 lang=javascript 3 | * 4 | * [11] Container With Most Water 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} height 10 | * @return {number} 11 | */ 12 | // 面积area = 长(j-i) * 宽(height数组中最小的数) 13 | var maxArea = function(height) { 14 | let max = 0; 15 | let area = 0; 16 | for(let i=0;i height[j]? (j-i)*height[j] : (j-i)*height[i]; 19 | max = area > max ? area : max; 20 | } 21 | } 22 | return max; 23 | }; 24 | // @lc code=end 25 | 26 | -------------------------------------------------------------------------------- /huyang/112.path-sum.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=112 lang=javascript 3 | * 4 | * [112] Path Sum 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * Definition for a binary tree node. 10 | * function TreeNode(val) { 11 | * this.val = val; 12 | * this.left = this.right = null; 13 | * } 14 | */ 15 | /** 16 | * @param {TreeNode} root 17 | * @param {number} sum 18 | * @return {boolean} 19 | */ 20 | // 路径总和 21 | // 二叉树 22 | // 递归 23 | var hasPathSum = function(root, sum) { 24 | if(!root) return false; 25 | if (root.left == null && root.right == null) { 26 | return sum - root.val == 0; 27 | } 28 | return hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val); 29 | }; 30 | // @lc code=end 31 | 32 | -------------------------------------------------------------------------------- /huyang/118.pascals-triangle.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=118 lang=javascript 3 | * 4 | * [118] Pascal's Triangle 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number} numRows 10 | * @return {number[][]} 11 | */ 12 | // 杨辉三角 13 | // 用临时数组tmp来存储下一个数组 14 | var generate = function(numRows) { 15 | let res = []; 16 | let tmp = [1]; 17 | for(let i=0; iprices[0] ? prices[1]-prices[0] : 0; 20 | for(let i=1; i res ? prices[i]-min : res; 23 | } 24 | return res; 25 | }; 26 | // @lc code=end 27 | 28 | -------------------------------------------------------------------------------- /huyang/122.best-time-to-buy-and-sell-stock-ii.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=122 lang=javascript 3 | * 4 | * [122] Best Time to Buy and Sell Stock II 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} prices 10 | * @return {number} 11 | */ 12 | // 买卖股票的最佳时机II 13 | // 后一天价格比前一天价格高,就在前一天买入,这天卖出 14 | var maxProfit = function(prices) { 15 | let count = 0; 16 | for(let i=0; i prices[i]) count += (prices[i+1] - prices[i]); 18 | } 19 | return count; 20 | }; 21 | // @lc code=end 22 | 23 | -------------------------------------------------------------------------------- /huyang/125.valid-palindrome.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=125 lang=javascript 3 | * 4 | * [125] Valid Palindrome 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {string} s 10 | * @return {boolean} 11 | */ 12 | // 验证回文串 13 | // 删除字符串中非字母数字的字符 14 | // 遍历前一半和后一半比较,如果不相同返回false 15 | var isPalindrome = function(s) { 16 | s = s.replace(/[^a-zA-Z0-9]/g, ''); 17 | let len = s.length%2 == 1 ? (s.length-1)/2 : s.length/2; 18 | for(let i=0; i 0) { 27 | let p = s.shift(); // 取第一个 28 | res.push(p.val); 29 | p.right && s.unshift(p.right); 30 | p.left && s.unshift(p.left); 31 | } 32 | return res; 33 | }; 34 | // @lc code=end 35 | 36 | -------------------------------------------------------------------------------- /huyang/145.binary-tree-postorder-traversal.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=145 lang=javascript 3 | * 4 | * [145] Binary Tree Postorder Traversal 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * Definition for a binary tree node. 10 | * function TreeNode(val) { 11 | * this.val = val; 12 | * this.left = this.right = null; 13 | * } 14 | */ 15 | /** 16 | * @param {TreeNode} root 17 | * @return {number[]} 18 | */ 19 | // 二叉树的后序遍历 20 | // 左右根 21 | // 迭代 22 | // 后序遍历比较复杂,但是看见网上有个比较好记住的办法: 23 | // 按照与前序相似的方法(前序压栈的顺序是先右后左,这里是先左后右),先得到一个结果,然后对结果倒序一下。 24 | var postorderTraversal = function(root) { 25 | if(!root) return []; 26 | let res = []; 27 | let s = [root]; 28 | while(s.length > 0) { 29 | let p = s.shift(); // 取第一个 30 | res.push(p.val); 31 | p.left && s.unshift(p.left); 32 | p.right && s.unshift(p.right); 33 | } 34 | return res.reverse(); 35 | }; 36 | // @lc code=end 37 | 38 | -------------------------------------------------------------------------------- /huyang/20191101第一周.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/huyang/20191101第一周.png -------------------------------------------------------------------------------- /huyang/20191110第二周.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/huyang/20191110第二周.png -------------------------------------------------------------------------------- /huyang/20191115第三周.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/huyang/20191115第三周.png -------------------------------------------------------------------------------- /huyang/20191123第四周.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/huyang/20191123第四周.png -------------------------------------------------------------------------------- /huyang/20191129第五周.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/huyang/20191129第五周.png -------------------------------------------------------------------------------- /huyang/20191207第六周.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/huyang/20191207第六周.png -------------------------------------------------------------------------------- /huyang/20191215第七周.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/huyang/20191215第七周.png -------------------------------------------------------------------------------- /huyang/20191220第八周.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/huyang/20191220第八周.png -------------------------------------------------------------------------------- /huyang/20191229第九周.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/huyang/20191229第九周.png -------------------------------------------------------------------------------- /huyang/20200112第十一周.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/huyang/20200112第十一周.png -------------------------------------------------------------------------------- /huyang/20200119第十二周.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/huyang/20200119第十二周.png -------------------------------------------------------------------------------- /huyang/22.generate-parentheses.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=22 lang=javascript 3 | * 4 | * [22] Generate Parentheses 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number} n 10 | * @return {string[]} 11 | */ 12 | // 括号生成 13 | // 回溯法——1、选择2、条件3、结束 14 | var parenthesis = function(str, res, l, r) { 15 | if(l==0 && r==0) res.push(str); 16 | if(l>0) parenthesis(str + "(", res, l-1, r); 17 | if(r>l) parenthesis(str + ")", res, l, r-1); 18 | }; 19 | var generateParenthesis = function(n) { 20 | let l = n, r = n; // 左括号右括号个数都为n 21 | let res = []; // 结果集 22 | parenthesis("", res, l, r); 23 | return res; 24 | }; 25 | // @lc code=end 26 | 27 | -------------------------------------------------------------------------------- /huyang/26.remove-duplicates-from-sorted-array.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=26 lang=javascript 3 | * 4 | * [26] Remove Duplicates from Sorted Array 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} nums 10 | * @return {number} 11 | */ 12 | var removeDuplicates = function(nums) { 13 | for(let i=nums.length-1;i>0;i--){ 14 | if(nums[i]==nums[i-1]) nums.splice(i,1); 15 | } 16 | return nums.length; 17 | }; 18 | // @lc code=end 19 | 20 | -------------------------------------------------------------------------------- /huyang/27.remove-element.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=27 lang=javascript 3 | * 4 | * [27] Remove Element 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} nums 10 | * @param {number} val 11 | * @return {number} 12 | */ 13 | var removeElement = function(nums, val) { 14 | for(let i=nums.length-1;i>=0;i--){ 15 | if(nums[i]==val){ 16 | nums.splice(i,1); 17 | } 18 | } 19 | return nums.length; 20 | }; 21 | // @lc code=end 22 | 23 | -------------------------------------------------------------------------------- /huyang/28.implement-str-str.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=28 lang=javascript 3 | * 4 | * [28] Implement strStr() 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {string} haystack 10 | * @param {string} needle 11 | * @return {number} 12 | */ 13 | var strStr = function(haystack, needle) { 14 | if(!haystack && needle) return -1; 15 | if(!haystack && !needle) return 0; 16 | if(haystack && !needle) return 0; 17 | let arr = haystack.split(needle); 18 | if(arr[0].length == haystack.length){ 19 | return -1; 20 | } else{ 21 | return arr[0].length; 22 | } 23 | }; 24 | // @lc code=end 25 | 26 | -------------------------------------------------------------------------------- /huyang/3.longest-substring-without-repeating-characters.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=3 lang=javascript 3 | * 4 | * [3] Longest Substring Without Repeating Characters 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {string} s 10 | * @return {number} 11 | */ 12 | // 无重复字符的最长子串 13 | // 依次把字符串元素塞入新字符串 14 | // 如果新字符串中没有该元素则塞入 15 | // 否则,删除该元素及其出现位置前面的元素再塞入 16 | // 返回新字符串的最大长度 17 | var lengthOfLongestSubstring = function(s) { 18 | let tmp = ''; 19 | let max = 0; 20 | for(let i=0; i max ? tmp.length : max; 24 | } else{ 25 | tmp = tmp.substr(tmp.indexOf(s.charAt(i))+1); 26 | tmp += s.charAt(i); 27 | } 28 | } 29 | return max; 30 | }; 31 | // @lc code=end 32 | 33 | -------------------------------------------------------------------------------- /huyang/32.longest-valid-parentheses.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=32 lang=javascript 3 | * 4 | * [32] Longest Valid Parentheses 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {string} s 10 | * @return {number} 11 | */ 12 | var longestValidParentheses = function(s) { 13 | if(s.length <2) return 0; 14 | let arr = s.split(""); 15 | let res = []; 16 | let count = 0; 17 | for(let i in arr){ 18 | if(arr[i] == "("){ 19 | res.push(arr[i]); 20 | } else{ 21 | if(res.length > 0){ 22 | res.pop(); 23 | count++; 24 | } 25 | } 26 | } 27 | return (count-res.length)*2; 28 | }; 29 | // @lc code=end 30 | 31 | -------------------------------------------------------------------------------- /huyang/33.search-in-rotated-sorted-array.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=33 lang=javascript 3 | * 4 | * [33] Search in Rotated Sorted Array 5 | */ 6 | 7 | // @lc code=start 8 | // 搜索旋转排序数组 9 | // 时间复杂度要求O(log n) 10 | // 第一步:找旋转点 11 | // 第二步:左右两边同时比较开始寻找 12 | /** 13 | * @param {number[]} nums 14 | * @param {number} target 15 | * @return {number} 16 | */ 17 | var search = function(nums, target) { 18 | if(nums.length == 0) return -1; 19 | if(nums.length == 1) return nums[0]==target ? 0 : -1; 20 | let s = nums.length % 2 == 1 ? (nums.length + 1)/2 : nums.length/2; 21 | for(let i=0,j=nums.length-1; i= target){ 20 | return i; 21 | } 22 | } 23 | return nums.length; 24 | }; 25 | // @lc code=end 26 | 27 | -------------------------------------------------------------------------------- /huyang/38.count-and-say.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=38 lang=javascript 3 | * 4 | * [38] Count and Say 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number} n 10 | * @return {string} 11 | */ 12 | // 报数 13 | // 递归 14 | // 不管n是几,要得到结果必须从n=1开始,且结果和n-1的结果有关 15 | // 所以用一个临时数组存放n-1的结果作为求n的结果的函数的入参 16 | var dd = function(index, arr, n) { 17 | if(index == n) return arr.join(''); 18 | index++; 19 | let tmp = []; 20 | let count = 1; 21 | for(let i=0; i 0) arr[nums[i]] = nums[i]; 24 | } 25 | if(arr.length<1) return 1; 26 | for(let j=1;j-1;i--){ 20 | tmp.push(matrix[i][j]); 21 | } 22 | matrix.push(tmp); 23 | tmp = []; 24 | } 25 | matrix.splice(0, len); 26 | }; 27 | // @lc code=end 28 | 29 | -------------------------------------------------------------------------------- /huyang/50.pow-x-n.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=50 lang=javascript 3 | * 4 | * [50] Pow(x, n) 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number} x 10 | * @param {number} n 11 | * @return {number} 12 | */ 13 | // x的n次方 14 | // n>0,n个x的乘积 15 | // n<0,1除以n个x的乘积 16 | var myPow = function(x, n) { 17 | if(n == 0) return 1.0; 18 | if(n == 1) return x; 19 | if(x == 0) return 0; 20 | if(x == 1) return 1.0; 21 | if(x == -1){ 22 | if(Math.abs(n)%2 == 0){ 23 | return 1.0; 24 | } else{ 25 | return -1.0; 26 | } 27 | } 28 | let flag = n>0 ? true : false; 29 | let res = x; 30 | for(let i=1;i=0){ 18 | sum += nums[i]; 19 | } else{ 20 | sum = nums[i]; 21 | } 22 | res = res>sum ? res : sum; 23 | } 24 | return res; 25 | }; 26 | // @lc code=end 27 | 28 | -------------------------------------------------------------------------------- /huyang/55.jump-game.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=55 lang=javascript 3 | * 4 | * [55] Jump Game 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} nums 10 | * @return {boolean} 11 | */ 12 | // 跳跃游戏 13 | // 如果长度为1,起点即终点,返回true 14 | // 如果长度大于1且起点为0,返回false 15 | // 从倒数第二位向前遍历,如果遇到0,则判断能不能跳过该位置 16 | var canJump = function(nums) { 17 | if(nums.length == 1) return true; 18 | if(nums[0] == 0) return false; 19 | for(let i=nums.length-2; i>0; i--){ 20 | if(nums[i] == 0){ 21 | for(let j=i; j>=0; j--){ 22 | // 如果从nums[j]结点可以直接跳到“0”结点之后,那么直接就从nums[j]开始向前继续判断 23 | if(nums[j] > (i - j)) { 24 | i = j; 25 | break; 26 | } 27 | // 一直遍历到第一个位置还找不到可以跳过0的结点,则返回false 28 | if(j == 0) return false; 29 | } 30 | } 31 | } 32 | return true; 33 | }; 34 | // @lc code=end 35 | 36 | -------------------------------------------------------------------------------- /huyang/56.merge-intervals.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=56 lang=javascript 3 | * 4 | * [56] Merge Intervals 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[][]} intervals 10 | * @return {number[][]} 11 | */ 12 | // 合并区间 13 | // 插入数组并按升序排序 14 | var sortInsert = function (arr, n){ 15 | for(let i in arr){ 16 | if(n<=arr[i]){ 17 | arr.splice(i, 0, n); 18 | return arr; 19 | } 20 | } 21 | arr.push(n); 22 | return arr; 23 | } 24 | var merge = function(intervals) { 25 | let a = []; // 区间左边 26 | let b = []; // 区间右边 27 | for(let i in intervals){ 28 | a = sortInsert(a, intervals[i][0]); 29 | b = sortInsert(b, intervals[i][1]); 30 | } 31 | for(let i=a.length-1; i>0; i--){ 32 | if(a[i] <= b[i-1]){ 33 | a.splice(i, 1); 34 | b.splice(i-1, 1); 35 | } 36 | } 37 | return a.map((item, i) => [item, b[i]]);; 38 | }; 39 | // @lc code=end 40 | 41 | -------------------------------------------------------------------------------- /huyang/58.length-of-last-word.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=58 lang=javascript 3 | * 4 | * [58] Length of Last Word 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {string} s 10 | * @return {number} 11 | */ 12 | // 最后一个单词的长度 13 | var lengthOfLastWord = function(s) { 14 | let arr = s.split(' '); 15 | for(let i=arr.length-1;i>=0;i--){ 16 | if(arr[i].length>0) return arr[i].length; 17 | } 18 | return 0; 19 | }; 20 | // @lc code=end 21 | 22 | -------------------------------------------------------------------------------- /huyang/60.permutation-sequence.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=60 lang=javascript 3 | * 4 | * [60] Permutation Sequence 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number} n 10 | * @param {number} k 11 | * @return {string} 12 | */ 13 | // 第k个排列 14 | // 生成排列组合 15 | var pailie = function(arr, tmp, res, k){ 16 | if(res.length == k) return; 17 | if(arr.length == 0) res.push(tmp); 18 | for(let i=0; i index+1), '', res, k); 27 | return res[k-1]; 28 | }; 29 | // @lc code=end 30 | 31 | -------------------------------------------------------------------------------- /huyang/66.plus-one.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=66 lang=javascript 3 | * 4 | * [66] Plus One 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} digits 10 | * @return {number[]} 11 | */ 12 | // 加一 13 | // 用数组来实现小学的竖式 14 | var plusOne = function(digits) { 15 | let add = new Array(digits.length).fill(0); 16 | add.push(1); 17 | digits.unshift(0); 18 | let p = 0; // 进位 19 | for(let i=digits.length-1;i>=0;i--){ 20 | if(digits[i]+add[i]+p > 9){ 21 | digits[i] = digits[i]+add[i]+p-10; 22 | p=1; 23 | } else{ 24 | digits[i] = digits[i]+add[i]+p; 25 | p = 0; 26 | } 27 | } 28 | if(digits[0] == 0) digits.shift(); 29 | return digits; 30 | }; 31 | // @lc code=end 32 | 33 | -------------------------------------------------------------------------------- /huyang/69.sqrt-x.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=69 lang=javascript 3 | * 4 | * [69] Sqrt(x) 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number} x 10 | * @return {number} 11 | */ 12 | // x的平方根 13 | var mySqrt = function(x) { 14 | if(x==0) return 0; 15 | for(let i = 1; i<=x; i++){ 16 | if(i*i==x) return i; 17 | if(i*i>x) return i-1; 18 | } 19 | }; 20 | // @lc code=end 21 | 22 | -------------------------------------------------------------------------------- /huyang/7.reverse-integer.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=7 lang=javascript 3 | * 4 | * [7] Reverse Integer 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number} x 10 | * @return {number} 11 | */ 12 | var reverse = function(x) { 13 | let m = 1024*1024*2048; 14 | if(x > 0){ 15 | x = x.toString().split("").reverse().join(""); 16 | } else{ 17 | x = -(-x).toString().split("").reverse().join(""); 18 | } 19 | if(x>=m-1 || x<=-m){ 20 | return 0; 21 | } else{ 22 | return x; 23 | } 24 | }; 25 | // @lc code=end 26 | 27 | -------------------------------------------------------------------------------- /huyang/70.climbing-stairs.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=70 lang=javascript 3 | * 4 | * [70] Climbing Stairs 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number} n 10 | * @return {number} 11 | */ 12 | // 爬楼梯 13 | // n=1 1 14 | // n=2 2 15 | // n=3 3 = 2 + 1 16 | // n=4 5 = 3 + 2 17 | // n=5 8 = 5 + 3 18 | // n=6 13 = 8 + 5 19 | var climbStairs = function(n) { 20 | if(n<4) return n; 21 | let a = 1; 22 | let b = 2; 23 | let tmp = a+b; 24 | for(let i=3;i<=n;i++){ 25 | tmp = a+b; 26 | a = b; 27 | b = tmp; 28 | } 29 | return b; 30 | }; 31 | // @lc code=end 32 | 33 | -------------------------------------------------------------------------------- /huyang/73.set-matrix-zeroes.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=73 lang=javascript 3 | * 4 | * [73] Set Matrix Zeroes 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[][]} matrix 10 | * @return {void} Do not return anything, modify matrix in-place instead. 11 | */ 12 | // 矩阵置零 13 | // 先找出所有值为0的位置 14 | // 然后根据将该位置的横竖位置出现的元素置为0 15 | var setZeroes = function(matrix) { 16 | let res = []; 17 | for(let i in matrix){ 18 | for(let j in matrix[0]){ 19 | if(matrix[i][j] == 0) res.push([i, j]); 20 | } 21 | } 22 | for(let k in res){ 23 | for(let i in matrix[0]){ 24 | matrix[res[k][0]][i] = 0; 25 | } 26 | for(let j in matrix){ 27 | matrix[j][res[k][1]] = 0; 28 | } 29 | } 30 | }; 31 | // @lc code=end 32 | 33 | -------------------------------------------------------------------------------- /huyang/74.search-matrix.js: -------------------------------------------------------------------------------- 1 | // 搜索二维矩阵 2 | // 每行中的整数从左到右按升序排列。 3 | // 每行的第一个整数大于前一行的最后一个整数。 4 | // 先找到在哪一行 5 | // 再从这行中找 6 | var searchMatrix = function(matrix, target) { 7 | // 空矩阵 8 | if(matrix.length == 0) return false; 9 | if(matrix[0].length == 0) return false; 10 | // target小于最小值 11 | if(matrix[0][0] > target) return false; 12 | if(matrix[0][0] == target) return true; 13 | // target大于最大值 14 | if(matrix[matrix.length -1][matrix[0].length - 1] < target) return false; 15 | if(matrix[matrix.length -1][matrix[0].length - 1] < target) return true; 16 | for(let i in matrix){ 17 | if(matrix[i][matrix[0].length - 1] >= target){ 18 | for(let j in matrix[i]){ 19 | if(matrix[i][j] == target) return true; 20 | } 21 | return false; 22 | } 23 | } 24 | return false; 25 | }; -------------------------------------------------------------------------------- /huyang/75.sort-colors.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=75 lang=javascript 3 | * 4 | * [75] Sort Colors 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} nums 10 | * @return {void} Do not return anything, modify nums in-place instead. 11 | */ 12 | // 颜色分类 13 | let len = nums.length; 14 | let a = len, b = len, c = len; 15 | for(let i=0; i [index+1]); 19 | let res = [[], [1]]; 20 | for(let i=2; i<=n; i++){ 21 | for(let j in res){ 22 | let tmp = [...res[j]]; 23 | if(tmp.length < k){ 24 | tmp.push(i); 25 | res.push(tmp); 26 | } 27 | } 28 | } 29 | return res.filter((item) =>{ 30 | return item.length == k; 31 | }); 32 | }; 33 | // @lc code=end 34 | 35 | -------------------------------------------------------------------------------- /huyang/771.jewels-and-stones.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=771 lang=javascript 3 | * 4 | * [771] Jewels and Stones 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {string} J 10 | * @param {string} S 11 | * @return {number} 12 | */ 13 | var numJewelsInStones = function(J, S) { 14 | var jarr = J.split(""); 15 | var sarr = S.split(""); 16 | var count = 0; 17 | for(let j in jarr){ 18 | for(let s in sarr){ 19 | if(jarr[j] === sarr[s]) count++; 20 | } 21 | } 22 | return count; 23 | }; 24 | // @lc code=end 25 | 26 | -------------------------------------------------------------------------------- /huyang/78.subsets.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=78 lang=javascript 3 | * 4 | * [78] Subsets 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} nums 10 | * @return {number[][]} 11 | */ 12 | // 子集 13 | // 每次给结果数组增加一个新元素 14 | var subsets = function(nums) { 15 | if(nums.length == 0) return [[]]; 16 | let res = [[], [nums[0]]]; 17 | for(let i=1; i nums1[j] && j nums1[j-1]){ 30 | let tmp = nums1[i]; 31 | nums1[i] = nums1[j-1]; 32 | nums1[j-1] = tmp; 33 | } else{ 34 | i++; 35 | } 36 | } 37 | }; 38 | // @lc code=end 39 | 40 | -------------------------------------------------------------------------------- /huyang/9.palindrome-number.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode id=9 lang=javascript 3 | * 4 | * [9] Palindrome Number 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number} x 10 | * @return {boolean} 11 | */ 12 | var isPalindrome = function(x) { 13 | if(x < 0){ 14 | return false; 15 | } else if(x == 0){ 16 | return true; 17 | } else{ 18 | let t = x; 19 | if(t == x.toString().split("").reverse().join("")){ 20 | return true; 21 | } else{ 22 | return false; 23 | } 24 | } 25 | }; 26 | // @lc code=end 27 | 28 | -------------------------------------------------------------------------------- /huyang/readMe.md: -------------------------------------------------------------------------------- 1 | huyang -------------------------------------------------------------------------------- /liuxionghui/01.第一周/2019-10-30/ 1. 两数之和.js: -------------------------------------------------------------------------------- 1 | // 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 2 | 3 | // 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 4 | 5 | // 示例: 6 | 7 | // 给定 nums = [2, 7, 11, 15], target = 9 8 | 9 | // 因为 nums[0] + nums[1] = 2 + 7 = 9 10 | // 所以返回 [0, 1] 11 | 12 | /** 13 | * @param {number[]} nums 14 | * @param {number} target 15 | * @return {number[]} 16 | */ 17 | var twoSum = function(nums, target) { 18 | var result = []; 19 | var len = nums.length; 20 | for(var i=0;i= Math.pow(2, 31) - 1 || x <= -Math.pow(2, 31)) ? 0 : x 28 | } 29 | x = overflow(x) 30 | 31 | let isNegative = x < 0 32 | if (isNegative) { 33 | x = -x 34 | } 35 | let a = 0 36 | while (x > 9) { 37 | a = a * 10 + x % 10 * 10 38 | x = parseInt(x / 10) 39 | } 40 | a += x 41 | 42 | return isNegative ? overflow(-a) : overflow(a) 43 | }; -------------------------------------------------------------------------------- /liuxionghui/01.第一周/2019-11-02/Snipaste_2019-11-02_11-54-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/01.第一周/2019-11-02/Snipaste_2019-11-02_11-54-40.png -------------------------------------------------------------------------------- /liuxionghui/01.第一周/2019-11-03/9.回文数.js: -------------------------------------------------------------------------------- 1 | // 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 2 | 3 | // 示例 1: 4 | 5 | // 输入: 121 6 | // 输出: true 7 | // 示例 2: 8 | 9 | // 输入: -121 10 | // 输出: false 11 | // 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 12 | // 示例 3: 13 | 14 | // 输入: 10 15 | // 输出: false 16 | // 解释: 从右向左读, 为 01 。因此它不是一个回文数。 17 | 18 | 19 | /** 20 | * @param {number} x 21 | * @return {boolean} 22 | */ 23 | var isPalindrome = function(x) { 24 | return x.toString() === x.toString().split('').reverse().join('') 25 | }; -------------------------------------------------------------------------------- /liuxionghui/01.第一周/2019-11-03/Snipaste_2019-11-03_15-57-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/01.第一周/2019-11-03/Snipaste_2019-11-03_15-57-15.png -------------------------------------------------------------------------------- /liuxionghui/01.第一周/Snipaste_2019-11-03_22-34-28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/01.第一周/Snipaste_2019-11-03_22-34-28.png -------------------------------------------------------------------------------- /liuxionghui/02.第二周/2019-11-05/Snipaste_2019-11-05_17-03-23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/02.第二周/2019-11-05/Snipaste_2019-11-05_17-03-23.png -------------------------------------------------------------------------------- /liuxionghui/02.第二周/2019-11-07/14.最长公共前缀.js: -------------------------------------------------------------------------------- 1 | // 编写一个函数来查找字符串数组中的最长公共前缀。 2 | 3 | // 如果不存在公共前缀,返回空字符串 ""。 4 | 5 | // 示例 1: 6 | 7 | // 输入: ["flower","flow","flight"] 8 | // 输出: "fl" 9 | // 示例 2: 10 | 11 | // 输入: ["dog","racecar","car"] 12 | // 输出: "" 13 | // 解释: 输入不存在公共前缀。 14 | // 说明: 15 | 16 | // 所有输入只包含小写字母 a-z 。 17 | 18 | /** 19 | * @param {string[]} strs 20 | * @return {string} 21 | */ 22 | var longestCommonPrefix = function(strs) { 23 | strs.sort((a,b) => a.length - b.length > 0); 24 | let str = strs[0] || ''; 25 | 26 | for(let i = 0; i < strs.length; i++) { 27 | for (let j = 0; j < str.length; j ++) { 28 | if (strs[i][j] !== str[j]) { 29 | if (j === 0) return '' 30 | str = str.substr(0, j); 31 | } 32 | } 33 | } 34 | return str; 35 | }; 36 | -------------------------------------------------------------------------------- /liuxionghui/02.第二周/2019-11-07/Snipaste_2019-11-07_13-07-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/02.第二周/2019-11-07/Snipaste_2019-11-07_13-07-32.png -------------------------------------------------------------------------------- /liuxionghui/02.第二周/2019-11-09/Snipaste_2019-11-09_22-11-35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/02.第二周/2019-11-09/Snipaste_2019-11-09_22-11-35.png -------------------------------------------------------------------------------- /liuxionghui/02.第二周/2019-11-10/Snipaste_2019-11-10_20-16-35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/02.第二周/2019-11-10/Snipaste_2019-11-10_20-16-35.png -------------------------------------------------------------------------------- /liuxionghui/02.第二周/Snipaste_2019-11-10_20-17-39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/02.第二周/Snipaste_2019-11-10_20-17-39.png -------------------------------------------------------------------------------- /liuxionghui/03.第三周/2019-11-12/Snipaste_2019-11-12_16-03-55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/03.第三周/2019-11-12/Snipaste_2019-11-12_16-03-55.png -------------------------------------------------------------------------------- /liuxionghui/03.第三周/2019-11-14/Snipaste_2019-11-14_11-15-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/03.第三周/2019-11-14/Snipaste_2019-11-14_11-15-04.png -------------------------------------------------------------------------------- /liuxionghui/03.第三周/2019-11-17/Snipaste_2019-11-17_16-20-51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/03.第三周/2019-11-17/Snipaste_2019-11-17_16-20-51.png -------------------------------------------------------------------------------- /liuxionghui/03.第三周/Snipaste_2019-11-17_16-21-37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/03.第三周/Snipaste_2019-11-17_16-21-37.png -------------------------------------------------------------------------------- /liuxionghui/04.第四周/2019-11-25/3. 无重复字符的最长子串.js: -------------------------------------------------------------------------------- 1 | // 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 2 | 3 | // 示例 1: 4 | 5 | // 输入: "abcabcbb" 6 | // 输出: 3 7 | // 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 8 | // 示例 2: 9 | 10 | // 输入: "bbbbb" 11 | // 输出: 1 12 | // 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 13 | // 示例 3: 14 | 15 | // 输入: "pwwkew" 16 | // 输出: 3 17 | // 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 18 | //   请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。 19 | 20 | 21 | var lengthOfLongestSubstring = function (s) { 22 | let n = s.length; 23 | let hashMap = new Map(); 24 | let ans = 0; 25 | for (let i = 0, j = 0; i < n; i++) { 26 | if (hashMap.has(s[i])) { 27 | j = Math.max(hashMap.get(s[i]), j) 28 | } 29 | ans = Math.max(ans, i - j + 1); 30 | hashMap.set(s[i], i + 1) 31 | } 32 | return ans; 33 | }; 34 | -------------------------------------------------------------------------------- /liuxionghui/04.第四周/2019-11-25/Snipaste_2019-11-25_13-58-52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/04.第四周/2019-11-25/Snipaste_2019-11-25_13-58-52.png -------------------------------------------------------------------------------- /liuxionghui/04.第四周/2019-11-27/Snipaste_2019-11-27_14-08-28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/04.第四周/2019-11-27/Snipaste_2019-11-27_14-08-28.png -------------------------------------------------------------------------------- /liuxionghui/04.第四周/Snipaste_2019-11-27_13-55-56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/04.第四周/Snipaste_2019-11-27_13-55-56.png -------------------------------------------------------------------------------- /liuxionghui/05.第五周/2019-11-30/Snipaste_2019-11-30_13-52-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/05.第五周/2019-11-30/Snipaste_2019-11-30_13-52-06.png -------------------------------------------------------------------------------- /liuxionghui/05.第五周/2019-12-01/16. 最接近的三数之和.js: -------------------------------------------------------------------------------- 1 | // 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 2 | 3 | // 例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 4 | 5 | // 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2). 6 | let res = nums[0]+nums[1]+nums[2]; 7 | let abs = Math.abs(res-target); 8 | for(let i=0; i 0 ? sum += nums[i] : sum = nums[i] 19 | // sum 负责加加加, max 负责大大大 20 | // 每次迭代,都始终让我们的 max 保持最大值,因为sum会有多个累加和,并不是加到最后就会是最大值 21 | max = Math.max(sum, max) 22 | } 23 | return max 24 | }; 25 | 26 | 27 | 28 | // 关键思路如下: 29 | // 1、累加的过程中,若当前累加之和不小心成了负数,务必及时止损,从新开始 30 | // 2、始终让 max 保持最大,因为在有负数项的情况下,并不是一直累加下去就会有最大值,世事难料,需始终保持业界最高水准 31 | 32 | 33 | -------------------------------------------------------------------------------- /liuxionghui/09.第九周/2019-12-28/Snipaste_2019-12-28_20-41-52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/09.第九周/2019-12-28/Snipaste_2019-12-28_20-41-52.png -------------------------------------------------------------------------------- /liuxionghui/09.第九周/2019-12-29/Snipaste_2019-12-29_20-45-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/09.第九周/2019-12-29/Snipaste_2019-12-29_20-45-40.png -------------------------------------------------------------------------------- /liuxionghui/09.第九周/Snipaste_2019-12-29_20-46-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/09.第九周/Snipaste_2019-12-29_20-46-15.png -------------------------------------------------------------------------------- /liuxionghui/readMe.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/liuxionghui/readMe.md -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leetcode", 3 | "version": "1.0.0", 4 | "description": "learning", 5 | "main": "index.js", 6 | "scripts": { 7 | "commit": "node ./bin/commit_workflow.js" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/xianweics/leetcode.git" 12 | }, 13 | "keywords": [ 14 | "leetcode" 15 | ], 16 | "author": "nobody", 17 | "license": "ISC", 18 | "bugs": { 19 | "url": "https://github.com/xianweics/leetcode/issues" 20 | }, 21 | "homepage": "https://github.com/xianweics/leetcode#readme", 22 | "devDependencies": { 23 | "chalk": "^2.4.2", 24 | "inquirer": "^7.0.0" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /shenjunhong/1332.6和9组合最大的数字.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {number} num 3 | * @return {number} 4 | */ 5 | // var maximum69Number = function(num) { 6 | // console.log('num: ', num); 7 | // var val ='' 8 | 9 | // val=(num+'').replace('6', 9) 10 | // return val 11 | 12 | 13 | 14 | 15 | 16 | // }; 17 | 18 | const maximum69Number = num => Number(num.toString().replace('6', '9')); 19 | 20 | 21 | var num = 9996; 22 | var val = maximum69Number(num); 23 | console.log('maximum69Number: ', val); -------------------------------------------------------------------------------- /shenjunhong/595大的国家.js: -------------------------------------------------------------------------------- 1 | select name ,population ,area from World where area > 3000000 UNION select name ,population ,area from World where population > 25000000; -------------------------------------------------------------------------------- /shenjunhong/620完美数.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {number} num 3 | * @return {boolean} 4 | */ 5 | var checkPerfectNumber = function(num) { 6 | if ([6, 28, 496, 8128, 33550336].includes(num)) return true 7 | else return false 8 | }; 9 | 10 | // var val = checkPerfectNumber(28); 11 | var val = checkPerfectNumber(29) 12 | 13 | console.log('val: ', val); -------------------------------------------------------------------------------- /shenjunhong/709转换成小写.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {string} str 3 | * @return {string} 4 | */ 5 | var toLowerCase = function(str) { 6 | return str.toLocaleLowerCase() 7 | }; 8 | 9 | var str = "Hello"; 10 | var val = toLowerCase(str); 11 | console.log('val: ', val); 12 | // 输出: "hello" -------------------------------------------------------------------------------- /shenjunhong/TinyUrl的加密与解密#535.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Encodes a URL to a shortened URL. 3 | * 4 | * @param {string} longUrl 5 | * @return {string} 6 | */ 7 | var encode = function(longUrl) { 8 | console.log('longUrl: ', longUrl); 9 | return longUrl 10 | }; 11 | 12 | /** 13 | * Decodes a shortened URL to its original URL. 14 | * 15 | * @param {string} shortUrl 16 | * @return {string} 17 | */ 18 | var decode = function(shortUrl) { 19 | console.log('shortUrl: ', shortUrl); 20 | return shortUrl 21 | }; 22 | 23 | /** 24 | * Your functions will be called as such: 25 | * decode(encode(url)); 26 | */ 27 | 28 | var url = 'https://leetcode.com/problems/design-tinyurl' 29 | console.log('val: ', decode(encode(url))); 30 | -------------------------------------------------------------------------------- /shenjunhong/ip地址无效化#1108.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {string} address 3 | * @return {string} 4 | */ 5 | var defangIPaddr = function(address) { 6 | // var ary = []; 7 | var reg = /\./g 8 | var sjh = address.replace(reg, '[.]') 9 | return sjh 10 | console.log('sjh: ', sjh); 11 | }; 12 | 13 | 14 | var val = defangIPaddr('1.1.1.1'); 15 | console.log('defangIPaddr: ', defangIPaddr); 16 | 17 | 18 | var defangIPaddr = function(address){ 19 | // for(let i in address) { 20 | // if(reg.test(address[i])){ 21 | // var j = i; 22 | // ary[j] = '['; 23 | // ary[j+1] = '.'; 24 | // ary[j+2] = ']'; 25 | // i = i+2; 26 | // } else { 27 | // ary.push(address[i]) 28 | // } 29 | // } 30 | // console.log('ary: ', ary); 31 | } 32 | //最开始的话 想了replace替换 33 | // 可是后面走偏了,想到直接用数组的特性去i +i +i 34 | //后面发现不行 这样太笨了 每次都要去数数 直接用replace替换当成死的东西 直接替换不更好吗 -------------------------------------------------------------------------------- /shenjunhong/readMe.md: -------------------------------------------------------------------------------- 1 | # 后续的文件增加都会增加到上面并以编号对应 2 | -------------------------------------------------------------------------------- /shenjunhong/test.js: -------------------------------------------------------------------------------- 1 | // message.js 2 | async function sendMessage() { 3 | 4 | } 5 | export { sendMessage }; 6 | 7 | // index.js 8 | import { sendMessage } from './message'; 9 | -------------------------------------------------------------------------------- /shenjunhong/x的平方根#69.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {number} x 3 | * @return {number} 4 | */ 5 | var mySqrt = function(x) { 6 | // 1、二分搜索的精髓: 7 | // (1)单调性和计算内容重复 8 | // (2)求答案的问题改成猜答案 9 | let low = 0, high = x; 10 | let ans = 0; 11 | while(low <= high) { 12 | let mid = (low + high) / 2; 13 | if (mid * mid <= x) { 14 | ans = mid; 15 | low = mid + 1; 16 | } else if(mid * mid > x) { 17 | high = mid - 1; 18 | } 19 | } 20 | return Math.floor(ans); 21 | 22 | 23 | Math.floor(Math.sqrt(x)); 24 | 25 | // var i = 1; 26 | // while(x>=i*i){ 27 | // i++; 28 | // } 29 | // return i-1; 30 | //方法2 ES6 31 | // return Math.floor(x ** 0.5);//向下取整 x^0.5 32 | 33 | 34 | }; 35 | 36 | var val = mySqrt(3); 37 | console.log('val: ', val); -------------------------------------------------------------------------------- /shenjunhong/两两交换链表#24.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/shenjunhong/两两交换链表#24.js -------------------------------------------------------------------------------- /shenjunhong/二叉树的最大深度#104.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Definition for a binary tree node. 3 | * function TreeNode(val) { 4 | * this.val = val; 5 | * this.left = this.right = null; 6 | * } 7 | */ 8 | /** 9 | * @param {TreeNode} root 10 | * @return {number} 11 | */ 12 | var maxDepth = function(root) { 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | }; -------------------------------------------------------------------------------- /shenjunhong/删去字符串中的元音#1199.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/shenjunhong/删去字符串中的元音#1199.js -------------------------------------------------------------------------------- /shenjunhong/删除链表的倒数第N个节点#19.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Definition for singly-linked list. 3 | * function ListNode(val) { 4 | * this.val = val; 5 | * this.next = null; 6 | * } 7 | */ 8 | /** 9 | * @param {ListNode} head 10 | * @return {ListNode} 11 | */ 12 | var swapPairs = function(head) { 13 | 14 | }; -------------------------------------------------------------------------------- /shenjunhong/反转字符串#344.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {character[]} s 3 | * @return {void} Do not return anything, modify s in-place instead. 4 | */ 5 | var reverseString = function(s) { 6 | console.log('s: ', s); 7 | //1.原地修改 所以 不能新建数组 8 | //2.使用O(1) 9 | return s.reverse(); 10 | }; 11 | 12 | // var a = ["h","e","l","l","o"]; 13 | var a = 'hello' 14 | var val = reverseString(a) 15 | console.log('val: ', val); -------------------------------------------------------------------------------- /shenjunhong/宝石与石头#771.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {string} J 3 | * @param {string} S 4 | * @return {number} 5 | */ 6 | var numJewelsInStones = function(J, S) { 7 | const newSet = [...new Set(J)]; 8 | let len = 0; 9 | for(let i of newSet){ 10 | for(let j of S){ 11 | if(i == j){ 12 | len++ 13 | } 14 | } 15 | } 16 | return len; 17 | }; 18 | 19 | // var J = 'aA'; 20 | // var S = 'aaaa'; 21 | 22 | 23 | var J = 'aA'; 24 | var S = 'aabA'; 25 | var val = numJewelsInStones(J, S) 26 | console.log('val: ', val); -------------------------------------------------------------------------------- /shenjunhong/无效的最长字符串#03.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {string} s 3 | * @return {number} 4 | */ 5 | var lengthOfLongestSubstring = function(s) { 6 | const map = {}; 7 | var left = 0; 8 | 9 | return s.split('').reduce((max, v, i) => { 10 | left = map[v] >= left ? map[v] + 1 : left; 11 | map[v] = i; 12 | return Math.max(max, i - left + 1); 13 | }, 0); 14 | 15 | }; -------------------------------------------------------------------------------- /shenjunhong/最后一个单词的长度#58.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {string} s 3 | * @return {number} 4 | */ 5 | var lengthOfLastWord = function(s) { 6 | const S = s.trim(); 7 | const arr = S.split(' ') 8 | var len = arr.length -1 9 | return arr[len].length == 0 ? 0 : arr[len].length 10 | }; 11 | 12 | 13 | // var str = "Hello "; 14 | var str = 'a '; 15 | // var str = "Hello World"; 16 | var val = lengthOfLastWord(str) 17 | console.log('val: ', val); 18 | // 输出: 5 19 | 20 | -------------------------------------------------------------------------------- /shenjunhong/最大序列之和#.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {number[]} nums 3 | * @return {number} 4 | */ 5 | var maxSubArray = function(nums) { 6 | sum=nums[0]; 7 | n=nums[0]; 8 | for(let i=1; i0) n+=nums[i]; 10 | else n=nums[i]; 11 | if(sum 0) { 19 | let ary = [] 20 | let res = [] 21 | for (let i = 0; i < layer.length; i++) { 22 | res.push(layer[i].val) 23 | if (layer[i].left) ary.push(layer[i].left) 24 | if (layer[i].right) ary.push(layer[i].right) 25 | } 26 | layer = ary 27 | result.push(res) 28 | } 29 | return result 30 | }; 31 | -------------------------------------------------------------------------------- /tanxu/104二叉树的最大深度.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Definition for a binary tree node. 3 | * function TreeNode(val) { 4 | * this.val = val; 5 | * this.left = this.right = null; 6 | * } 7 | */ 8 | /** 9 | * @param {TreeNode} root 10 | * @return {number} 11 | */ 12 | var maxDepth = function(root) { 13 | let result = 0 14 | let lvNodes = [] 15 | if (root) lvNodes = [root] 16 | while (lvNodes.length > 0) { 17 | result++ 18 | let nodes = [] 19 | for (let i = 0; i < lvNodes.length; i++) { 20 | if (lvNodes[i].left) nodes.push(lvNodes[i].left) 21 | if (lvNodes[i].right) nodes.push(lvNodes[i].right) 22 | } 23 | lvNodes = nodes 24 | } 25 | return result 26 | }; 27 | -------------------------------------------------------------------------------- /tanxu/107二叉树的层次遍历 II.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Definition for a binary tree node. 3 | * function TreeNode(val) { 4 | * this.val = val; 5 | * this.left = this.right = null; 6 | * } 7 | */ 8 | /** 9 | * @param {TreeNode} root 10 | * @return {number[][]} 11 | */ 12 | var levelOrderBottom = function(root) { 13 | let result = [] 14 | let ary = levelOrder(root) 15 | let len = ary.length 16 | for (let i = 0; i < len; i++) { 17 | result.push(ary[len - 1 - i]) 18 | } 19 | return result 20 | }; 21 | 22 | var levelOrder = function(root) { 23 | let result = [] 24 | let layer = [] 25 | if (root) { 26 | layer.push(root) 27 | } 28 | while (layer.length > 0) { 29 | let ary = [] 30 | let res = [] 31 | for (let i = 0; i < layer.length; i++) { 32 | res.push(layer[i].val) 33 | if (layer[i].left) ary.push(layer[i].left) 34 | if (layer[i].right) ary.push(layer[i].right) 35 | } 36 | layer = ary 37 | result.push(res) 38 | } 39 | return result 40 | }; 41 | -------------------------------------------------------------------------------- /tanxu/108将有序数组转换为二叉搜索树.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Definition for a binary tree node. 3 | * function TreeNode(val) { 4 | * this.val = val; 5 | * this.left = this.right = null; 6 | * } 7 | */ 8 | /** 9 | * @param {number[]} nums 10 | * @return {TreeNode} 11 | */ 12 | var sortedArrayToBST = function(nums) { 13 | if (nums.length === 0) return null 14 | let index = Math.floor(nums.length / 2) 15 | let node = new TreeNode(nums[index]) 16 | node.left = sortedArrayToBST(nums.slice(0,index)) 17 | node.right = sortedArrayToBST(nums.slice(index + 1, nums.length)) 18 | return node 19 | }; 20 | 21 | function TreeNode(val) { 22 | this.val = val; 23 | this.left = this.right = null; 24 | } 25 | -------------------------------------------------------------------------------- /tanxu/10正则表达式匹配.js: -------------------------------------------------------------------------------- 1 | // 递归判断 2 | var isMatch = function(s, p) { 3 | if (s === p) { 4 | return true 5 | } 6 | // 第一个字符匹配上了 7 | let firstMatch = s && (s[0] === p[0] || p[0] === '.') 8 | 9 | if(firstMatch) { 10 | if (p[1] === '*') { 11 | return isMatch(s,p.substring(2)) || isMatch(s.substring(1),p) 12 | } else { 13 | return isMatch(s.substring(1), p.substring(1)) 14 | } 15 | } else { 16 | if (p[1] === '*') { 17 | return isMatch(s,p.substring(2)) 18 | } else { 19 | return false 20 | } 21 | } 22 | }; 23 | 24 | 25 | console.log(isMatch("ab", 'c*ab')) 26 | 27 | // 方法2 动态规划 28 | 29 | var isMatch2 = function(s, p) { 30 | } 31 | 32 | console.log(isMatch2("ab", '.*')) 33 | -------------------------------------------------------------------------------- /tanxu/110平衡二叉树.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Definition for a binary tree node. 3 | * function TreeNode(val) { 4 | * this.val = val; 5 | * this.left = this.right = null; 6 | * } 7 | */ 8 | /** 9 | * @param {TreeNode} root 10 | * @return {boolean} 11 | */ 12 | // 每个节点的左右子树高度差不超过1 13 | var isBalanced = function(root) { 14 | return fun(root) !== false 15 | }; 16 | 17 | function fun(root) { 18 | if (root === null) return 0 19 | let leftDeep = fun(root.left) 20 | if (leftDeep === false) return false 21 | let rightDeep = fun(root.right) 22 | if (rightDeep === false) return false 23 | if (Math.abs(leftDeep - rightDeep) >=2 ) return false 24 | else return Math.max(leftDeep,rightDeep) + 1 25 | }; 26 | 27 | 28 | -------------------------------------------------------------------------------- /tanxu/111二叉树的最小深度.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Definition for a binary tree node. 3 | * function TreeNode(val) { 4 | * this.val = val; 5 | * this.left = this.right = null; 6 | * } 7 | */ 8 | /** 9 | * @param {TreeNode} root 10 | * @return {number} 11 | */ 12 | var minDepth = function(root) { 13 | return fun(root) 14 | }; 15 | 16 | function fun(root) { 17 | if (root === null) return 0 18 | let leftDeep = fun(root.left) 19 | let rightDeep = fun(root.right) 20 | if (leftDeep === 0) return rightDeep + 1 21 | if(rightDeep === 0) return leftDeep + 1 22 | return Math.min(leftDeep,rightDeep) + 1 23 | }; 24 | -------------------------------------------------------------------------------- /tanxu/112路径总和.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Definition for a binary tree node. 3 | * function TreeNode(val) { 4 | * this.val = val; 5 | * this.left = this.right = null; 6 | * } 7 | */ 8 | /** 9 | * @param {TreeNode} root 10 | * @param {number} sum 11 | * @return {boolean} 12 | */ 13 | var hasPathSum = function(root, sum) { 14 | if (!root) return false 15 | sum -= root.val 16 | if (sum === 0 && !root.left && !root.right) { 17 | return true 18 | } else { 19 | return (hasPathSum(root.left, sum)) || (hasPathSum(root.right, sum)) 20 | } 21 | }; 22 | -------------------------------------------------------------------------------- /tanxu/113路径总和 II.js: -------------------------------------------------------------------------------- 1 | var pathSum = function(root, sum) { 2 | let array = [] 3 | let res = [] 4 | getPathSum(root,sum) 5 | return res 6 | 7 | function getPathSum(root, sum) { 8 | if (!root) return [] 9 | array.push(root.val) 10 | sum -= root.val 11 | if (sum === 0 && !root.left && !root.right) { 12 | res.push(Array.from(array)) 13 | } else { 14 | if (root.left) { 15 | getPathSum(root.left, sum) 16 | array.pop() 17 | } 18 | if (root.right) { 19 | getPathSum(root.right, sum) 20 | array.pop() 21 | } 22 | } 23 | } 24 | }; 25 | -------------------------------------------------------------------------------- /tanxu/114二叉树展开为链表.js: -------------------------------------------------------------------------------- 1 | var flatten = function(root) { 2 | if (!root) return null 3 | _flatten(root, root) 4 | return root 5 | } 6 | 7 | var _flatten = function(root,node) { 8 | let left = root.left 9 | let right = root.right 10 | if (!left && right) return _flatten(right, node) 11 | // 叶子节点 12 | if (!left && !right) node = root 13 | if (left) { 14 | root.right = left 15 | root.left = null 16 | node = _flatten(left, node) 17 | } 18 | if (right) { 19 | node.right = right 20 | node = _flatten(right, node) 21 | } 22 | return node 23 | }; 24 | -------------------------------------------------------------------------------- /tanxu/116填充每个节点的下一个右侧节点指针.js: -------------------------------------------------------------------------------- 1 | /** 2 | * // Definition for a Node. 3 | * function Node(val, left, right, next) { 4 | * this.val = val === undefined ? null : val; 5 | * this.left = left === undefined ? null : left; 6 | * this.right = right === undefined ? null : right; 7 | * this.next = next === undefined ? null : next; 8 | * }; 9 | */ 10 | /** 11 | * @param {Node} root 12 | * @return {Node} 13 | */ 14 | var connect = function(root) { 15 | if (!root) return root 16 | let left = root.left 17 | let right = root.right 18 | while (left) { 19 | left.next = right 20 | left = left.right 21 | right = right.left 22 | } 23 | connect(root.left) 24 | connect(root.right) 25 | return root 26 | }; 27 | 28 | 29 | -------------------------------------------------------------------------------- /tanxu/124二叉树中的最大路径和.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Definition for a binary tree node. 3 | * function TreeNode(val) { 4 | * this.val = val; 5 | * this.left = this.right = null; 6 | * } 7 | */ 8 | /** 9 | * @param {TreeNode} root 10 | * @return {number} 11 | */ 12 | let maxVal = null 13 | var maxPathSum = function(root) { 14 | maxVal = Number.MIN_SAFE_INTEGER 15 | SubsequentTraversal(root) 16 | return maxVal 17 | }; 18 | 19 | // 后续遍历 20 | function SubsequentTraversal (root) { 21 | let maxLeft = Number.MIN_SAFE_INTEGER 22 | let maxRight = Number.MIN_SAFE_INTEGER 23 | if (root.left) { 24 | maxLeft = SubsequentTraversal(root.left) 25 | } 26 | if (root.right) { 27 | maxRight = SubsequentTraversal(root.right) 28 | } 29 | maxVal = Math.max(maxVal,root.val, root.val + maxLeft, root.val + maxRight, root.val + maxLeft + maxRight) 30 | return Math.max(root.val, root.val + maxLeft, root.val + maxRight) 31 | } 32 | -------------------------------------------------------------------------------- /tanxu/12整数转罗马数字.js: -------------------------------------------------------------------------------- 1 | // 整数转罗马数字 2 | 3 | var intToRoman = function(num) { 4 | let nums = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1] 5 | let romans = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"] 6 | let res = '' 7 | let index = 0 8 | while(num > 0) { 9 | if (nums[index] > num) { 10 | index++ 11 | } else { 12 | res += romans[index] 13 | num = num - nums[index] 14 | } 15 | } 16 | return res 17 | }; 18 | 19 | console.log(intToRoman(234)) 20 | -------------------------------------------------------------------------------- /tanxu/13罗马数字转整数.js: -------------------------------------------------------------------------------- 1 | // 罗马数字转整数 2 | // 时间复杂度O(n) 3 | // 空间复杂度O(n) 4 | 5 | var romanToInt = function(s) { 6 | let map = new Map() 7 | map.set("M", 1000) 8 | map.set("CM", 900) 9 | map.set("D", 500) 10 | map.set("CD", 400) 11 | map.set("C", 100) 12 | map.set("XC", 90) 13 | map.set("L", 50) 14 | map.set("XL", 40) 15 | map.set("X", 10) 16 | map.set("IX", 9) 17 | map.set("V", 5) 18 | map.set("IV", 4) 19 | map.set("I", 1) 20 | 21 | let res = 0 22 | for (let i = 0; i < s.length; i++) { 23 | if (map.get(s[i] + s[i+1])) { 24 | res += map.get(s[i] + s[i+1]) 25 | i++ 26 | } else { 27 | res += (map.get(s[i]) || 0) 28 | } 29 | } 30 | return res 31 | }; 32 | 33 | console.log(romanToInt("CMVIII")) 34 | -------------------------------------------------------------------------------- /tanxu/145二叉树的后序遍历(非递归).js: -------------------------------------------------------------------------------- 1 | // 双栈实现 2 | /** 3 | * Definition for a binary tree node. 4 | * function TreeNode(val) { 5 | * this.val = val; 6 | * this.left = this.right = null; 7 | * } 8 | */ 9 | /** 10 | * @param {TreeNode} root 11 | * @return {number[]} 12 | */ 13 | var postorderTraversal = function(root) { 14 | if (!root) return [] 15 | let stackA = [root] 16 | let stackB = [] 17 | let result = [] 18 | while (stackA.length > 0) { 19 | let stackTop = stackA[stackA.length - 1] 20 | stackA.pop() 21 | stackB.push(stackTop) 22 | if (stackTop.left) { 23 | stackA.push(stackTop.left) 24 | } 25 | if (stackTop.right) { 26 | stackA.push(stackTop.right) 27 | } 28 | } 29 | while (stackB.length > 0) { 30 | result.push(stackB.pop().val) 31 | } 32 | return result 33 | }; 34 | 35 | -------------------------------------------------------------------------------- /tanxu/145二叉树的后序遍历.js: -------------------------------------------------------------------------------- 1 | // 方法1 递归 2 | var postorderTraversal = function(root) { 3 | if (!root) return [] 4 | let result = [] 5 | Traversal(root, result) 6 | return result 7 | }; 8 | 9 | function Traversal (node, result) { 10 | if (node.left) { 11 | Traversal(node.left, result) 12 | } 13 | if (node.right) { 14 | Traversal(node.right, result) 15 | } 16 | result.push(node.val) 17 | } 18 | -------------------------------------------------------------------------------- /tanxu/14最长公共前缀.js: -------------------------------------------------------------------------------- 1 | // 最长公共前缀 2 | // 编写一个函数来查找字符串数组中的最长公共前缀。 3 | // 4 | // 如果不存在公共前缀,返回空字符串 ""。 5 | // 6 | // 示例 1: 7 | // 8 | // 输入: ["flower","flow","flight"] 9 | // 输出: "fl" 10 | // 示例 2: 11 | // 12 | // 输入: ["dog","racecar","car"] 13 | // 输出: "" 14 | // 解释: 输入不存在公共前缀。 15 | // 说明: 16 | // 17 | // 所有输入只包含小写字母 a-z 。 18 | 19 | var longestCommonPrefix = function(strs) { 20 | let resultStr = "" 21 | if (strs.length === 0) { 22 | return "" 23 | } 24 | if (strs.length === 1) { 25 | return strs[0] 26 | } 27 | 28 | let char = "" 29 | for (let i = 0; i < strs[0].length; i++) { 30 | char = strs[0][i] 31 | for (let j = 1; j < strs.length; j++) { 32 | if (strs[j][i] !== char) { 33 | return resultStr 34 | } 35 | } 36 | resultStr += char 37 | } 38 | return resultStr 39 | }; 40 | 41 | console.log(longestCommonPrefix(["flower","flow","flight"])) 42 | -------------------------------------------------------------------------------- /tanxu/20有效的括号.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {string} s 3 | * @return {boolean} 4 | */ 5 | var isValid = function(s) { 6 | let stack = [] 7 | let map = new Map() 8 | map.set('(', ')') 9 | map.set('[', ']') 10 | map.set('{', '}') 11 | for (let i = 0; i < s.length; i++) { 12 | if (s[i] === '(' || s[i] === '[' || s[i] === '{') { 13 | stack.push(s[i]) 14 | } else { 15 | let stackTop = stack[stack.length - 1] 16 | if (s[i] === map.get(stackTop)) { 17 | stack.pop() 18 | } else { 19 | return false 20 | } 21 | } 22 | } 23 | return stack.length === 0 24 | }; 25 | -------------------------------------------------------------------------------- /tanxu/22括号生成.js: -------------------------------------------------------------------------------- 1 | var generateParenthesis = function(n) { 2 | if (n === 0 ) { 3 | return [] 4 | } 5 | let result = [] 6 | fun('(', 1, 0, n, result) 7 | return result 8 | }; 9 | 10 | function fun(str, left, right, n, result) { 11 | if (str.length === 2 * n) { 12 | result.push(str) 13 | } else { 14 | if (left < n) { 15 | let l = left + 1 16 | fun(str + '(', l, right, n, result) 17 | } 18 | if (left > right) { 19 | let r = right + 1 20 | fun(str + ')', left, r, n, result) 21 | } 22 | } 23 | } 24 | 25 | console.log(generateParenthesis(2)) 26 | -------------------------------------------------------------------------------- /tanxu/24两两交换链表中的节点.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Definition for singly-linked list. 3 | * function ListNode(val) { 4 | * this.val = val; 5 | * this.next = null; 6 | * } 7 | */ 8 | /** 9 | * @param {ListNode} head 10 | * @return {ListNode} 11 | */ 12 | var swapPairs = function(head) { 13 | if (head == null) return head 14 | if (head.next == null) return head 15 | let p0 = null 16 | let p1 = head 17 | let p2 = p1.next 18 | head = p2 19 | swap(p0, p1, p2) 20 | return head 21 | }; 22 | 23 | function swap (p0, p1, p2) { 24 | if (p0 !== null) { 25 | p0.next = p2 26 | } 27 | p1.next = p2.next 28 | p2.next = p1 29 | p0 = p1 30 | p1 = p1.next 31 | if (p1 === null) return 32 | p2 = p1.next 33 | if (p2 === null) return 34 | swap(p0, p1, p2) 35 | } 36 | -------------------------------------------------------------------------------- /tanxu/26 删除排序数组中的重复项.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {number[]} nums 3 | * @return {number} 4 | */ 5 | var removeDuplicates = function(nums) { 6 | if (nums.length === 0) return 0 7 | let i = 0 8 | for (let j = 1; j < nums.length; j++) { 9 | if (nums[i] !== nums[j]) { 10 | nums[i] = nums[j] 11 | i++ 12 | } 13 | } 14 | return i + 1 15 | }; 16 | 17 | console.log() 18 | -------------------------------------------------------------------------------- /tanxu/27移除元素.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {number[]} nums 3 | * @param {number} val 4 | * @return {number} 5 | */ 6 | var removeElement = function(nums, val) { 7 | let count = 0 8 | for (let i = 0; i < nums.length; i++) { 9 | if (nums[i] === val) { 10 | count++ 11 | } else { 12 | nums[i - count] = nums[i] 13 | } 14 | } 15 | return nums.length - count 16 | }; 17 | -------------------------------------------------------------------------------- /tanxu/28实现 strStr().js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {string} haystack 3 | * @param {string} needle 4 | * @return {number} 5 | */ 6 | var strStr = function(haystack, needle) { 7 | if (needle === '') return 0 8 | let index = 0 9 | let firstMatchs = [] 10 | let n = 1 11 | for (let i = 0; i < haystack.length; i++) { 12 | if (haystack[i] === needle[0] && i > (firstMatchs[firstMatchs.length - 1] || -1) ) { 13 | firstMatchs.push(i) 14 | } 15 | if (haystack[i] === needle[index]) { 16 | index++ 17 | } else { 18 | // 匹配失败,从第n个第一字符相同开始匹配 19 | index = 0 20 | if (n < firstMatchs.length) { 21 | i = firstMatchs[n] - 1 22 | n++ 23 | continue 24 | } 25 | } 26 | if (index === needle.length) { 27 | return i - index + 1 28 | } 29 | } 30 | return -1 31 | }; 32 | 33 | console.log(strStr("mississipi",'issipi')) 34 | -------------------------------------------------------------------------------- /tanxu/35搜索插入位置.js: -------------------------------------------------------------------------------- 1 | var searchInsert = function(nums, target) { 2 | let index = 0 3 | if (nums.length === 0) return 0 4 | 5 | while (nums.length > 1) { 6 | let k = (nums.length / 2).toFixed(0) - 1 7 | if (nums[k] === target) { 8 | return index + k 9 | } else if (nums[k] > target){ 10 | nums = nums.slice(0, k + 1) 11 | } else if (nums[k] < target) { 12 | nums = nums.slice(k + 1, nums.length) 13 | index = index + k + 1 14 | } 15 | } 16 | if (nums.length === 1) { 17 | return nums[0] >= target ? index : index + 1 18 | } 19 | return index 20 | }; 21 | 22 | console.log(searchInsert([1,3,5,6], 2)) 23 | -------------------------------------------------------------------------------- /tanxu/38报数.js: -------------------------------------------------------------------------------- 1 | var countAndSay = function(n) { 2 | if (n === 1) return '1' 3 | let str = '1' 4 | for (let i = 1; i < n; i++) { 5 | str = getNumbers(str) 6 | } 7 | return str 8 | }; 9 | 10 | function getNumbers(str) { 11 | let res = '' 12 | let count = 1 13 | for (let i = 0; i < str.length; i++) { 14 | if (str[i] !== str[i+1]) { 15 | res += count.toString() + str[i].toString() 16 | count = 1 17 | continue 18 | } else { 19 | count += 1 20 | } 21 | } 22 | return res 23 | } 24 | 25 | console.log(countAndSay(20)) 26 | -------------------------------------------------------------------------------- /tanxu/39组合总和.js: -------------------------------------------------------------------------------- 1 | var combinationSum = function(candidates, target) { 2 | let result = [] 3 | for (let i = 0; i < candidates.length; i++) { 4 | let sum = 0 5 | let ary1 = [] 6 | ary1.push(candidates[i]) 7 | sum += candidates[i] 8 | let ary2 = Array.from(candidates).splice(i,candidates.length) 9 | fun(ary1,ary2,sum,target) 10 | } 11 | 12 | function fun(ary1, ary2,sum, target) { 13 | console.log(ary1, ary2) 14 | if (sum < target) { 15 | for (let i = 0; i < ary2.length; i++) { 16 | let a1 = Array.from(ary1) 17 | a1.push(ary2[i]) 18 | let a2 = Array.from(ary2).splice(i,ary2.length) 19 | fun(a1,a2, sum + ary2[i], target) 20 | } 21 | } else if (sum === target) { 22 | result.push(Array.from(ary1)) 23 | } 24 | } 25 | return result 26 | }; 27 | 28 | 29 | 30 | console.log(combinationSum([1,2,3],6)) 31 | 32 | -------------------------------------------------------------------------------- /tanxu/415字符串相加.js: -------------------------------------------------------------------------------- 1 | var addStrings = function(num1, num2) { 2 | let len = Math.max(num1.length, num2.length) 3 | let len1 = num1.length 4 | let len2 = num2.length 5 | let sum = '' 6 | let carry = 0 7 | for (let i = 0; i = 0) { 5 | ary[nums[i]] = true 6 | } 7 | } 8 | if (ary.length === 0) return 1 9 | for (let i = 1; i < ary.length; i++) { 10 | if (!ary[i]) { 11 | return i 12 | } 13 | } 14 | return ary.length 15 | }; 16 | 17 | console.log(firstMissingPositive([3,4,-1,1])) 18 | -------------------------------------------------------------------------------- /tanxu/42接雨水.js: -------------------------------------------------------------------------------- 1 | var trap = function(height) { 2 | if (height.length <= 2) return 0 3 | let index = 0 4 | let sum = 0 5 | let temp = 0 6 | // 正向计算一次 7 | for (let i = 1; i < height.length; i++) { 8 | if (height[index] === 0) { 9 | index-- 10 | continue 11 | } 12 | if (height[i] < height[index]) { 13 | temp += height[index] - height[i] 14 | } else { 15 | sum += temp 16 | temp = 0 17 | index = i 18 | } 19 | } 20 | let ind = index 21 | // 反向计算一次 22 | index = height.length - 1 23 | temp = 0 24 | for (let i = height.length - 2; i >= ind; i--) { 25 | if (height[index] === 0) { 26 | index++ 27 | continue 28 | } 29 | if (height[i] < height[index]) { 30 | temp += height[index] - height[i] 31 | } else { 32 | sum += temp 33 | temp = 0 34 | index = i 35 | } 36 | } 37 | return sum 38 | }; 39 | 40 | console.log(trap([4,2,3])) 41 | -------------------------------------------------------------------------------- /tanxu/44通配符匹配.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxu/44通配符匹配.js -------------------------------------------------------------------------------- /tanxu/45跳跃游戏 II.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {number[]} nums 3 | * @return {number} 4 | */ 5 | var jump = function(nums) { 6 | let end = 0; 7 | let maxPosition = 0; 8 | let steps = 0; 9 | for(let i = 0; i < nums.length - 1; i++){ 10 | //找能跳的最远的 11 | maxPosition = Math.max(maxPosition, nums[i] + i); 12 | if( i === end){ 13 | //遇到边界,就更新边界,并且步数加一 14 | end = maxPosition; 15 | steps++; 16 | } 17 | } 18 | return steps; 19 | }; 20 | 21 | console.log(jump([2,4,3,2,1,2])) 22 | 23 | -------------------------------------------------------------------------------- /tanxu/46全排列.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {number[]} nums 3 | * @return {number[][]} 4 | */ 5 | var permute = function(nums) { 6 | let result = [] 7 | fun([], nums, nums.length, result) 8 | return result 9 | }; 10 | 11 | function fun (resItem, array,len, result) { 12 | for (let i = 0; i < array.length; i++) { 13 | resItem.push(array[i]) 14 | if (resItem.length === len) { 15 | // 深复制一个数组 16 | result.push(resItem.slice()) 17 | } else { 18 | let copy = array.slice() 19 | copy.splice(i,1) 20 | fun(resItem.slice(), copy, len, result) 21 | } 22 | resItem.pop() 23 | } 24 | } 25 | 26 | console.log(permute([1,2,3])) 27 | -------------------------------------------------------------------------------- /tanxu/46全排列.md: -------------------------------------------------------------------------------- 1 | # 题目 2 | 给定一个没有重复数字的序列,返回其所有可能的全排列。 3 | 4 | 5 | ``` 6 | 示例: 7 | 8 | 输入: [1,2,3] 9 | 输出: 10 | [ 11 | [1,2,3], 12 | [1,3,2], 13 | [2,1,3], 14 | [2,3,1], 15 | [3,1,2], 16 | [3,2,1] 17 | ] 18 | ``` 19 | 20 | # 思路 21 | 回溯思想 22 | 23 | # 代码 24 | 25 | ``` 26 | var permute = function(nums) { 27 | let result = [] 28 | fun([], nums, nums.length, result) 29 | return result 30 | }; 31 | 32 | function fun (resItem, array,len, result) { 33 | for (let i = 0; i < array.length; i++) { 34 | resItem.push(array[i]) 35 | if (resItem.length === len) { 36 | // 深复制一个数组 37 | result.push(resItem.slice()) 38 | } else { 39 | let copy = array.slice() 40 | copy.splice(i,1) 41 | fun(resItem.slice(), copy, len, result) 42 | } 43 | resItem.pop() 44 | } 45 | } 46 | 47 | console.log(permute([1,2,3])) 48 | ``` 49 | -------------------------------------------------------------------------------- /tanxu/47全排列 II.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {number[]} nums 3 | * @return {number[][]} 4 | */ 5 | var permuteUnique = function(nums) { 6 | let result = [] 7 | fun([], nums, nums.length, result) 8 | return result 9 | }; 10 | 11 | function fun (resItem, array,len, result) { 12 | let set = new Set() 13 | for (let i = 0; i < array.length; i++) { 14 | // 去除重复的情况 15 | if (set.has(array[i])) continue 16 | else set.add(array[i]) 17 | resItem.push(array[i]) 18 | if (resItem.length === len) { 19 | // 深复制一个数组 20 | result.push(resItem.slice()) 21 | } else { 22 | let copy = array.slice() 23 | copy.splice(i,1) 24 | fun(resItem.slice(), copy, len, result) 25 | } 26 | resItem.pop() 27 | } 28 | } 29 | 30 | console.log(permuteUnique([1,1,2])) 31 | -------------------------------------------------------------------------------- /tanxu/47全排列II.md: -------------------------------------------------------------------------------- 1 | # 题目 2 | 给定一个可包含重复数字的序列,返回所有不重复的全排列。 3 | 4 | 5 | ``` 6 | 示例: 7 | 8 | 输入: [1,1,2] 9 | 输出: 10 | [ 11 | [1,1,2], 12 | [1,2,1], 13 | [2,1,1] 14 | ] 15 | ``` 16 | 17 | 18 | 19 | 20 | # 思路 21 | 再46题全排列的基础上,增加去重的判断 22 | 23 | # 代码 24 | 25 | 26 | ``` 27 | var permuteUnique = function(nums) { 28 | let result = [] 29 | fun([], nums, nums.length, result) 30 | return result 31 | }; 32 | 33 | function fun (resItem, array,len, result) { 34 | let set = new Set() 35 | for (let i = 0; i < array.length; i++) { 36 | // 去除重复的情况 37 | if (set.has(array[i])) continue 38 | else set.add(array[i]) 39 | resItem.push(array[i]) 40 | if (resItem.length === len) { 41 | // 深复制一个数组 42 | result.push(resItem.slice()) 43 | } else { 44 | let copy = array.slice() 45 | copy.splice(i,1) 46 | fun(resItem.slice(), copy, len, result) 47 | } 48 | resItem.pop() 49 | } 50 | } 51 | 52 | console.log(permuteUnique([1,1,2])) 53 | ``` 54 | -------------------------------------------------------------------------------- /tanxu/48旋转图像.js: -------------------------------------------------------------------------------- 1 | var rotate = function(matrix) { 2 | let len = matrix.length 3 | for (let i = 0; i < len; i++) { 4 | for (let j = 0 ; j < len - i; j++) { 5 | let temp = matrix[i][j] 6 | matrix[i][j] = matrix[len - j - 1][len - i - 1] 7 | matrix[len - j - 1][len - i - 1] = temp 8 | } 9 | } 10 | 11 | for (let i = 0; i < Math.floor(len / 2); i++) { 12 | let temp = matrix[i] 13 | matrix[i] = matrix[len - i - 1] 14 | matrix[len - i - 1] = temp 15 | } 16 | console.log(matrix) 17 | }; 18 | 19 | rotate([[1,2,3],[4,5,6],[7,8,9]]) 20 | -------------------------------------------------------------------------------- /tanxu/49字母异位词分组.js: -------------------------------------------------------------------------------- 1 | var groupAnagrams = function(strs) { 2 | let result = [] 3 | let map = new Map() 4 | let index = 0 5 | for (let i = 0; i < strs.length; i++) { 6 | let key = Array.from(strs[i]).sort().join('') 7 | let mapVal = map.get(key) 8 | if (mapVal === undefined) { 9 | map.set(key, index) 10 | mapVal = index 11 | index++ 12 | } 13 | if (result[mapVal]) { 14 | result[mapVal].push(strs[i]) 15 | } else { 16 | result[mapVal] = [strs[i]] 17 | } 18 | } 19 | return result 20 | }; 21 | 22 | console.log(groupAnagrams(["eat", "tea", "tan", "ate", "nat", "bat"])) 23 | -------------------------------------------------------------------------------- /tanxu/50 Pow(x, n).js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {number} x 3 | * @param {number} n 4 | * @return {number} 5 | */ 6 | var myPow = function(x, n) { 7 | return x**n 8 | }; 9 | -------------------------------------------------------------------------------- /tanxu/53最大子序和.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {number[]} nums 3 | * @return {number} 4 | */ 5 | var maxSubArray = function(nums) { 6 | let sum = 0 7 | let result = 0 8 | for (let i = 0; i < nums.length; i++) { 9 | if (sum > 0) { 10 | sum += nums[i] 11 | } else { 12 | sum = nums[i] 13 | } 14 | result = Math.max(sum, result) 15 | } 16 | return result 17 | }; 18 | -------------------------------------------------------------------------------- /tanxu/55跳跃游戏.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {number[]} nums 3 | * @return {boolean} 4 | */ 5 | var canJump = function(nums) { 6 | let n = 1 7 | for (let i = nums.length - 2; i >= 0; i--) { 8 | 9 | if(nums[i]>=n) 10 | { 11 | n = 1; 12 | } 13 | else 14 | { 15 | n++; 16 | } 17 | 18 | if(i===0 && n>1) 19 | { 20 | return false; 21 | } 22 | } 23 | return true 24 | }; 25 | 26 | 27 | console.log(canJump([2,0,0])) 28 | -------------------------------------------------------------------------------- /tanxu/56合并区间.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {number[][]} intervals 3 | * @return {number[][]} 4 | */ 5 | var merge = function(intervals) { 6 | if (intervals.length === 0) return [] 7 | let array = [intervals[0]] 8 | let flag = false 9 | for (let i = 1 ;i < intervals.length; i++) { 10 | let index = 0 11 | for (let j = 0; j < array.length; j++) { 12 | if (intervals[i][0] >= array[j][0]) { 13 | index++ 14 | } 15 | } 16 | array.splice(index, 0, intervals[i]); 17 | } 18 | 19 | let result = [] 20 | let temp = array[0] 21 | for (let i = 1; i < array.length; i++) { 22 | if (array[i][0] <= temp[1]) { 23 | temp = [temp[0],Math.max(temp[1], array[i][1])] 24 | } else { 25 | result.push(temp) 26 | temp = array[i] 27 | } 28 | } 29 | result.push(temp) 30 | return result 31 | }; 32 | 33 | 34 | console.log(merge([[1,4], [2,3]])) 35 | -------------------------------------------------------------------------------- /tanxu/58最后一个单词的长度.js: -------------------------------------------------------------------------------- 1 | var lengthOfLastWord = function(s) { 2 | s = s.trim() 3 | let res = 0 4 | for (let i = s.length - 1; i >= 0; i--) { 5 | if (s[i] === ' ') { 6 | return res 7 | } else { 8 | res++ 9 | } 10 | } 11 | return res 12 | }; 13 | -------------------------------------------------------------------------------- /tanxu/6Z 字形变换.js: -------------------------------------------------------------------------------- 1 | var convert = function(s, numRows) { 2 | let array = [] 3 | let flag = 1 4 | let y = 0 5 | for (let i = 0; i < s.length; i++) { 6 | array[y] = (array[y] || "") + s[i] 7 | if (numRows > 1 && y === numRows - 1) { 8 | flag = -1 9 | } else if (y === 0) { 10 | flag = 1 11 | } 12 | y = y + flag 13 | } 14 | let result = "" 15 | for (let item of array) { 16 | result += item 17 | } 18 | return result 19 | }; 20 | console.log(convert('leetcode', 3)) -------------------------------------------------------------------------------- /tanxu/7整数反转.js: -------------------------------------------------------------------------------- 1 | var reverse = function (x) { 2 | let maxVal = Math.pow(2, 31) - 1 3 | let minVal = -Math.pow(2, 31) 4 | let result = 0 5 | while (x != 0) { 6 | let number = x % 10 7 | x = (x - number) / 10 8 | if (result > (maxVal - number)/10 || result < (minVal - number)/10) { 9 | return 0 10 | } 11 | result = result * 10 + number 12 | } 13 | return result 14 | }; 15 | 16 | console.log(reverse(-12345)) -------------------------------------------------------------------------------- /tanxu/96 不同的二叉搜索树.md: -------------------------------------------------------------------------------- 1 | # 题目 2 | 3 | 给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 4 | 5 | 6 | ``` 7 | 示例: 8 | 9 | 输入: 3 10 | 输出: 5 11 | 解释: 12 | 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 13 | 14 | 1 3 3 2 1 15 | \ / / / \ \ 16 | 3 2 1 1 3 2 17 | / / \ \ 18 | 2 1 2 3 19 | ``` 20 | 21 | # 思路 22 | 23 | 动态规划 24 | 25 | 当n=5时,从[1,2,3,4,5]中选择任意一个作为根节点 26 | 27 | 例如选择4作为根节点,那么左子树[1,2,3] 右子树[5] ,选择4作为根节点的有效解的个数就等于左子树的可能值 * 右子树的可能值,那么这就成了一个典型的动态规划问题 28 | 29 | # 代码 30 | 31 | 32 | ``` 33 | var numTrees = function(n) { 34 | if (n === 0) return 0 35 | let dp = [] 36 | dp[0] = 1 37 | dp[1] = 1 38 | for (let i = 2; i <= n; i++) { 39 | let sum = 0 40 | for (let j = 1; j <= i; j++) { 41 | sum += dp[i - j] * dp[j - 1] 42 | } 43 | dp[i] = sum 44 | } 45 | 46 | return dp[n] 47 | }; 48 | ``` 49 | -------------------------------------------------------------------------------- /tanxu/96不同的二叉搜索树.js: -------------------------------------------------------------------------------- 1 | 2 | var numTrees = function(n) { 3 | if (n === 0) return 0 4 | let dp = [] 5 | dp[0] = 1 6 | dp[1] = 1 7 | for (let i = 2; i <= n; i++) { 8 | let sum = 0 9 | for (let j = 1; j <= i; j++) { 10 | sum += dp[i - j] * dp[j - 1] 11 | } 12 | dp[i] = sum 13 | } 14 | 15 | return dp[n] 16 | }; 17 | 18 | console.log(numTrees(3)) 19 | 20 | -------------------------------------------------------------------------------- /tanxu/98验证二叉搜索树.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Definition for a binary tree node. 3 | * function TreeNode(val) { 4 | * this.val = val; 5 | * this.left = this.right = null; 6 | * } 7 | */ 8 | /** 9 | * @param {TreeNode} root 10 | * @return {boolean} 11 | */ 12 | var isValidBST = function(root) { 13 | let result = [Number.MIN_SAFE_INTEGER] 14 | return fun(root, result) 15 | }; 16 | 17 | var fun = function(node, result) { 18 | if (node === null) return true 19 | if(node.left) { 20 | if (!fun(node.left, result)) return false 21 | } 22 | result.push(node.val) 23 | if (node.val <= (result.length - 2 >= 0 ? result[result.length - 2] : Number.MIN_SAFE_INTEGER)) return false 24 | if (node.right) { 25 | if (!fun(node.right, result)) return false 26 | } 27 | return true 28 | }; 29 | -------------------------------------------------------------------------------- /tanxu/9回文数.js: -------------------------------------------------------------------------------- 1 | // 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 2 | // 3 | // 示例 1: 4 | // 5 | // 输入: 121 6 | // 输出: true 7 | // 示例 2: 8 | // 9 | // 输入: -121 10 | // 输出: false 11 | // 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 12 | // 示例 3: 13 | // 14 | // 输入: 10 15 | // 输出: false 16 | // 解释: 从右向左读, 为 01 。因此它不是一个回文数。 17 | var isPalindrome = function(x) { 18 | let s = x.toString() 19 | let len = s.length 20 | for (let i = 0;i < Math.ceil(len/2);i++){ 21 | if (s[i] !== s[len - i -1]) { 22 | return false 23 | } 24 | } 25 | return true 26 | }; 27 | 28 | console.log(isPalindrome(-101)) 29 | -------------------------------------------------------------------------------- /tanxu/image/145.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxu/image/145.jpeg -------------------------------------------------------------------------------- /tanxu/image/32.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxu/image/32.jpg -------------------------------------------------------------------------------- /tanxu/image/39.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxu/image/39.jpeg -------------------------------------------------------------------------------- /tanxu/image/48.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxu/image/48.jpg -------------------------------------------------------------------------------- /tanxu/image/54.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxu/image/54.jpeg -------------------------------------------------------------------------------- /tanxu/第一周进度.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxu/第一周进度.jpg -------------------------------------------------------------------------------- /tanxu/第七周进度截图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxu/第七周进度截图.png -------------------------------------------------------------------------------- /tanxu/第三周进度截图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxu/第三周进度截图.png -------------------------------------------------------------------------------- /tanxu/第九周进度截图.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxu/第九周进度截图.jpg -------------------------------------------------------------------------------- /tanxu/第二周进度.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxu/第二周进度.png -------------------------------------------------------------------------------- /tanxu/第五周进度.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxu/第五周进度.png -------------------------------------------------------------------------------- /tanxu/第八周进度截图.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxu/第八周进度截图.jpg -------------------------------------------------------------------------------- /tanxu/第六周进度截图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxu/第六周进度截图.png -------------------------------------------------------------------------------- /tanxu/第十一周进度截图.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxu/第十一周进度截图.jpg -------------------------------------------------------------------------------- /tanxu/第十三周进度截图.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxu/第十三周进度截图.jpg -------------------------------------------------------------------------------- /tanxu/第十二周进度.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxu/第十二周进度.jpg -------------------------------------------------------------------------------- /tanxu/第十周进度截图.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxu/第十周进度截图.jpg -------------------------------------------------------------------------------- /tanxu/第四周进度截图.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxu/第四周进度截图.jpg -------------------------------------------------------------------------------- /tanxuan/100.相同的树.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=100 lang=javascript 3 | * 4 | * [100] 相同的树 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * Definition for a binary tree node. 10 | * function TreeNode(val) { 11 | * this.val = val; 12 | * this.left = this.right = null; 13 | * } 14 | */ 15 | /** 16 | * @param {TreeNode} p 17 | * @param {TreeNode} q 18 | * @return {boolean} 19 | */ 20 | var isSameTree = function(p, q) { 21 | if (p == null && q == null) { 22 | return true; 23 | } 24 | if (p != null && q != null && p.val == q.val) { 25 | return isSameTree(p.left, q.left) && isSameTree(p.right, q.right); 26 | } else { 27 | return false; 28 | } 29 | }; 30 | // @lc code=end 31 | -------------------------------------------------------------------------------- /tanxuan/101.对称二叉树.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=101 lang=javascript 3 | * 4 | * [101] 对称二叉树 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * Definition for a binary tree node. 10 | * function TreeNode(val) { 11 | * this.val = val; 12 | * this.left = this.right = null; 13 | * } 14 | */ 15 | /** 16 | * @param {TreeNode} root 17 | * @return {boolean} 18 | */ 19 | var isSymmetric = function(root) { 20 | return isMirror(root, root); 21 | }; 22 | 23 | function isMirror(p, q) { 24 | if (p == null && q == null) { 25 | return true; 26 | } 27 | if (p != null && q != null && p.val == q.val) { 28 | return isMirror(p.left, q.right) && isMirror(p.right, q.left); 29 | } else { 30 | return false; 31 | } 32 | } 33 | // @lc code=end 34 | 35 | -------------------------------------------------------------------------------- /tanxuan/104.二叉树的最大深度.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=104 lang=javascript 3 | * 4 | * [104] 二叉树的最大深度 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * Definition for a binary tree node. 10 | * function TreeNode(val) { 11 | * this.val = val; 12 | * this.left = this.right = null; 13 | * } 14 | */ 15 | /** 16 | * @param {TreeNode} root 17 | * @return {number} 18 | */ 19 | var maxDepth = function(root) { 20 | if (!root) { 21 | return 0; 22 | } 23 | return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1; 24 | }; 25 | // @lc code=end 26 | 27 | -------------------------------------------------------------------------------- /tanxuan/11.盛最多水的容器.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=11 lang=javascript 3 | * 4 | * [11] 盛最多水的容器 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} height 10 | * @return {number} 11 | */ 12 | 13 | var maxArea = function(height) { 14 | let max = 0, 15 | len = height.length; 16 | 17 | /** 18 | * 暴力 19 | * 算出所有可能的值,然后保留当前最大值 20 | * 容器的体积 = (柱子数 - 1) * 两端的较小数 21 | */ 22 | 23 | if (len === 2) { 24 | return Math.min(height[0], height[1]); 25 | } 26 | 27 | for (let i = 0; i < len - 1; i++) { 28 | for (let j = i + 1; j < len; j++) { 29 | let curr = Math.min(height[j], height[i]) * (j - i); 30 | max = curr > max ? curr : max; 31 | } 32 | } 33 | 34 | return max; 35 | }; 36 | // @lc code=end 37 | -------------------------------------------------------------------------------- /tanxuan/118.杨辉三角.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=118 lang=javascript 3 | * 4 | * [118] 杨辉三角 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number} numRows 10 | * @return {number[][]} 11 | */ 12 | 13 | /** 14 | * 两端都为1 15 | * a[i][j] = a[i-1][j-1] + a[i-1][j] 16 | */ 17 | var generate = function(numRows) { 18 | let res = []; 19 | for (let i = 1; i <= numRows; i++) { 20 | let row = []; 21 | for (let j = 0; j < i; j++) { 22 | if (!j || j === i - 1) { 23 | row.push(1); 24 | } else { 25 | // console.log(res[i-2][j-1], res[i-2][j]) 26 | row.push(res[i - 2][j - 1] + res[i - 2][j]); 27 | } 28 | } 29 | res.push(row); 30 | } 31 | return res; 32 | }; 33 | // @lc code=end 34 | -------------------------------------------------------------------------------- /tanxuan/12.整数转罗马数字.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=12 lang=javascript 3 | * 4 | * [12] 整数转罗马数字 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number} num 10 | * @return {string} 11 | */ 12 | var intToRoman = function(num) { 13 | const obj = { 14 | I: 1, 15 | IV: 4, 16 | V: 5, 17 | IX: 9, 18 | X: 10, 19 | XL: 40, 20 | L: 50, 21 | XC: 90, 22 | C: 100, 23 | CD: 400, 24 | D: 500, 25 | CM: 900, 26 | M: 1000 27 | }; 28 | // 获取键 和 值 数组 29 | let keys = Object.keys(obj).reverse(); 30 | let values = Object.values(obj).reverse(); 31 | let i = 0, 32 | res = ''; 33 | // 遍历键 34 | while (i < keys.length) { 35 | // 当前的除数 36 | let ss = Math.floor(num / values[i]); 37 | // 余数 38 | num = num % values[i]; 39 | // 拼接字符串 40 | res += keys[i].repeat(ss); 41 | // 如果减完了则提前退出 42 | if (!num) { 43 | return res; 44 | } 45 | i++; 46 | } 47 | return res; 48 | }; 49 | // @lc code=end 50 | -------------------------------------------------------------------------------- /tanxuan/121.买卖股票的最佳时机.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=121 lang=javascript 3 | * 4 | * [121] 买卖股票的最佳时机 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} prices 10 | * @return {number} 11 | */ 12 | var maxProfit = function(prices) { 13 | let len = prices.length, max = 0, diff = 0 14 | for(let i = 0; i max ? diff : max 18 | } 19 | } 20 | return max 21 | }; 22 | // @lc code=end 23 | 24 | -------------------------------------------------------------------------------- /tanxuan/122.买卖股票的最佳时机-ii.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=122 lang=javascript 3 | * 4 | * [122] 买卖股票的最佳时机 II 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} prices 10 | * @return {number} 11 | */ 12 | var maxProfit = function(prices) { 13 | let len = prices.length, max = 0, diff = 0 14 | for(let i = 0; i 0) { 17 | max += diff 18 | } 19 | } 20 | return max 21 | }; 22 | // @lc code=end 23 | 24 | -------------------------------------------------------------------------------- /tanxuan/125.验证回文串.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=125 lang=javascript 3 | * 4 | * [125] 验证回文串 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {string} s 10 | * @return {boolean} 11 | */ 12 | var isPalindrome = function(s) { 13 | s = s.replace(/[^0-9a-zA-Z]/g, '').toLowerCase(); 14 | let len = s.length, i = (len / 2) >> 0 15 | while (i >= 0) { 16 | if (s[i] !== s[len - i - 1]) { 17 | return false; 18 | } 19 | // console.log(s[i], s[len - i - 1]) 20 | i--; 21 | } 22 | return true; 23 | }; 24 | // @lc code=end 25 | -------------------------------------------------------------------------------- /tanxuan/13.罗马数字转整数.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=13 lang=javascript 3 | * 4 | * [13] 罗马数字转整数 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {string} s 10 | * @return {number} 11 | */ 12 | var romanToInt = function(s) { 13 | const obj = { 14 | I: 1, 15 | IV: 4, 16 | V: 5, 17 | IX: 9, 18 | X: 10, 19 | XL: 40, 20 | L: 50, 21 | XC: 90, 22 | C: 100, 23 | CD: 400, 24 | D: 500, 25 | CM: 900, 26 | M: 1000 27 | }; 28 | let keys = Object.keys(obj).reverse(); 29 | let i = 0, 30 | res = 0; 31 | // 当字符串还有长度时 32 | while (s) { 33 | // 找到最开始的键值 34 | if (s.startsWith(keys[i])) { 35 | // arr[i] = arr[i] ? arr[i] + 1 : 1 36 | // 结果累加 键值对应的 值 37 | res += obj[keys[i]]; 38 | // 截取后面的字符串 39 | s = s.slice(keys[i].length); 40 | } else { 41 | // arr[i] = 0 42 | // 如果没有 则将键数组后移 43 | i++; 44 | } 45 | } 46 | // console.log(arr) 47 | return res; 48 | }; 49 | // @lc code=end 50 | -------------------------------------------------------------------------------- /tanxuan/136.只出现一次的数字.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=136 lang=javascript 3 | * 4 | * [136] 只出现一次的数字 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} nums 10 | * @return {number} 11 | */ 12 | var singleNumber = function(nums) { 13 | for (let i = 0; i < nums.length; i++) { 14 | // console.log(i, nums.lastIndexOf(nums[i])) 15 | if (nums.lastIndexOf(nums[i]) === nums.indexOf(nums[i])) { 16 | return nums[i]; 17 | } 18 | } 19 | }; 20 | // @lc code=end 21 | -------------------------------------------------------------------------------- /tanxuan/19.删除链表的倒数第n个节点.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=19 lang=javascript 3 | * 4 | * [19] 删除链表的倒数第N个节点 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * Definition for singly-linked list. 10 | * function ListNode(val) { 11 | * this.val = val; 12 | * this.next = null; 13 | * } 14 | */ 15 | /** 16 | * @param {ListNode} head 17 | * @param {number} n 18 | * @return {ListNode} 19 | */ 20 | var removeNthFromEnd = function(head, n) { 21 | let arr = [], res = new ListNode(0), list = res; 22 | // 获取所有值, 并存入数组 23 | while (head) { 24 | arr.push(head.val); 25 | head = head.next; 26 | } 27 | // 切掉不需要的值 28 | arr.splice(arr.length - n,1); 29 | // 用链表存储 30 | for(let i of arr) { 31 | list.next = new ListNode(i); 32 | list = list.next; 33 | } 34 | // 从头部往后返回 35 | return res.next; 36 | }; 37 | // @lc code=end 38 | -------------------------------------------------------------------------------- /tanxuan/20.有效的括号.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=20 lang=javascript 3 | * 4 | * [20] 有效的括号 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {string} s 10 | * @return {boolean} 11 | */ 12 | var isValid = function(s) { 13 | if (!s) { 14 | return true; 15 | } 16 | if (s.length % 2) { 17 | return false; 18 | } 19 | 20 | s = s 21 | .replace(/\(\)/g, '') 22 | .replace(/\{\}/g, '') 23 | .replace(/\[\]/g, ''); 24 | if (!s) { 25 | return true; 26 | } 27 | 28 | let middle = Math.floor(s.length / 2); 29 | while (middle) { 30 | s = s 31 | .replace(/\(\)/g, '') 32 | .replace(/\{\}/g, '') 33 | .replace(/\[\]/g, ''); 34 | let temp = Math.floor(s.length / 2); 35 | if (temp < middle) { 36 | middle = temp; 37 | } else { 38 | middle--; 39 | } 40 | } 41 | return s.length === 0; 42 | }; 43 | // @lc code=end 44 | -------------------------------------------------------------------------------- /tanxuan/22.括号生成.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=22 lang=javascript 3 | * 4 | * [22] 括号生成 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number} n 10 | * @return {string[]} 11 | */ 12 | var generateParenthesis = function(n) { 13 | let res = []; 14 | generate(res, '', 0, 0, n); 15 | return res; 16 | }; 17 | 18 | function generate(res, str, l, r, n) { 19 | if (l > n || r > n) return; 20 | if (l === n && r === n) { 21 | res.push(str); 22 | } 23 | if (l >= r) { 24 | generate(res, str + '(', l + 1, r, n); 25 | generate(res, str + ')', l, r + 1, n); 26 | } 27 | } 28 | // @lc code=end 29 | -------------------------------------------------------------------------------- /tanxuan/24.两两交换链表中的节点.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=24 lang=javascript 3 | * 4 | * [24] 两两交换链表中的节点 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * Definition for singly-linked list. 10 | * function ListNode(val) { 11 | * this.val = val; 12 | * this.next = null; 13 | * } 14 | */ 15 | /** 16 | * @param {ListNode} head 17 | * @return {ListNode} 18 | */ 19 | var swapPairs = function(head) { 20 | let res = new ListNode(0), list = res; 21 | while(head && head.next) { 22 | let t1 = head.next; 23 | list.next = new ListNode(t1.val); 24 | list = list.next; 25 | list.next = new ListNode(head.val); 26 | head = t1.next; 27 | list = list.next; 28 | console.log(head, list); 29 | } 30 | if (head) { 31 | list.next = new ListNode(head.val); 32 | list = list.next; 33 | } 34 | return res.next; 35 | }; 36 | // @lc code=end 37 | 38 | -------------------------------------------------------------------------------- /tanxuan/26.删除排序数组中的重复项.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=26 lang=javascript 3 | * 4 | * [26] 删除排序数组中的重复项 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} nums 10 | * @return {number} 11 | */ 12 | var removeDuplicates = function(nums) { 13 | // 如果长度不够直接返回 14 | if (nums.length <= 1) { 15 | return nums; 16 | } 17 | // 遍历 18 | for (let i = 1; i < nums.length; ) { 19 | // 如果相同则删除, 索引不变 20 | if (nums[i] === nums[i - 1]) { 21 | nums.splice(i, 1); 22 | } else { 23 | // 不相同则索引加1 24 | i++; 25 | } 26 | } 27 | return nums.length; 28 | }; 29 | // @lc code=end 30 | -------------------------------------------------------------------------------- /tanxuan/27.移除元素.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=27 lang=javascript 3 | * 4 | * [27] 移除元素 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} nums 10 | * @param {number} val 11 | * @return {number} 12 | */ 13 | var removeElement = function(nums, val) { 14 | for (let i = 0; i < nums.length; ) { 15 | if (nums[i] === val) { 16 | nums.splice(i, 1); 17 | } else { 18 | i++; 19 | } 20 | } 21 | // console.log(nums) 22 | return nums.length; 23 | }; 24 | // @lc code=end 25 | -------------------------------------------------------------------------------- /tanxuan/28.实现-str-str.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=28 lang=javascript 3 | * 4 | * [28] 实现 strStr() 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {string} haystack 10 | * @param {string} needle 11 | * @return {number} 12 | */ 13 | var strStr = function(haystack, needle) { 14 | // return haystack.indexOf(needle); 15 | new RegExp('(.*?)' + needle).test(haystack); 16 | if (haystack.startsWith(needle)) { 17 | return 0; 18 | } 19 | return RegExp.$1.length > 0 ? RegExp.$1.length : -1 ; 20 | }; 21 | // @lc code=end 22 | 23 | -------------------------------------------------------------------------------- /tanxuan/3.无重复字符的最长子串.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=3 lang=javascript 3 | * 4 | * [3] 无重复字符的最长子串 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {string} s 10 | * @return {number} 11 | */ 12 | var lengthOfLongestSubstring = function(s) { 13 | let index = 0, // 当前字符串长度 14 | max = 0, // 最大长度 15 | str = ''; // 当前字符串 16 | for (let c of s) { 17 | // 没有重复的字符串长度 18 | if (!str.includes(c)) { 19 | str += c; 20 | index++; 21 | max = max > index ? max : index; 22 | console.log('if: ', str, index, max); 23 | } else { 24 | // 当有重复的字符串时,从第一个重复字符后开始截取 25 | str += c; 26 | // 这里不能直接使用 slice(1) 或者 lastIndexOf 重复字符可能是第一位, 也可能是最后一位 27 | str = str.slice(str.indexOf(c) + 1); 28 | // 不能直接赋值给 max, 这是当前字符串的长度, 并不一定是最长的字符串 29 | index = str.length; 30 | console.log('else: ', str, index, max); 31 | } 32 | } 33 | return max; 34 | }; 35 | // @lc code=end 36 | -------------------------------------------------------------------------------- /tanxuan/33.搜索旋转排序数组.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=33 lang=javascript 3 | * 4 | * [33] 搜索旋转排序数组 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} nums 10 | * @param {number} target 11 | * @return {number} 12 | */ 13 | var search = function(nums, target) { 14 | let len = nums.length 15 | for(let i = 0; i < len; i ++) { 16 | if (nums[i] === target) { 17 | return i 18 | } 19 | } 20 | return -1 21 | }; 22 | // @lc code=end 23 | 24 | -------------------------------------------------------------------------------- /tanxuan/34.在排序数组中查找元素的第一个和最后一个位置.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=34 lang=javascript 3 | * 4 | * [34] 在排序数组中查找元素的第一个和最后一个位置 5 | */ 6 | /** 7 | * 1. 遍历找到和target相等的索引 8 | * 2. 如果只有一个,则再推一个 9 | * 3. 如果没有则返回[-1,-1] 10 | * 4. 如果有两个及以上,则返回第一个和最后一个的索引 11 | */ 12 | // @lc code=start 13 | /** 14 | * @param {number[]} nums 15 | * @param {number} target 16 | * @return {number[]} 17 | */ 18 | var searchRange = function(nums, target) { 19 | let len = nums.length, result = [] 20 | for(let i = 0; i < len; i ++) { 21 | if (nums[i] === target) { 22 | result.push(i) 23 | } 24 | } 25 | if (result.length === 1) { 26 | let tmp = result[0] 27 | result.push(tmp) 28 | return result 29 | } else if (!result.length){ 30 | return [-1, -1] 31 | } else { 32 | return [result[0], result[result.length - 1]] 33 | } 34 | }; 35 | // @lc code=end 36 | 37 | -------------------------------------------------------------------------------- /tanxuan/35.搜索插入位置.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=35 lang=javascript 3 | * 4 | * [35] 搜索插入位置 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} nums 10 | * @param {number} target 11 | * @return {number} 12 | */ 13 | var searchInsert = function(nums, target) { 14 | let len = nums.length; 15 | for(let i = len - 1; i >= 0;) { 16 | if (nums[i] < target) { 17 | return i + 1; 18 | } 19 | i --; 20 | } 21 | return 0; 22 | }; 23 | // @lc code=end 24 | 25 | -------------------------------------------------------------------------------- /tanxuan/4.寻找两个有序数组的中位数.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=4 lang=javascript 3 | * 4 | * [4] 寻找两个有序数组的中位数 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} nums1 10 | * @param {number[]} nums2 11 | * @return {number} 12 | */ 13 | var findMedianSortedArrays = function(nums1, nums2) { 14 | // 1. 合并并排序 15 | let arr = nums1.concat(nums2).sort((a, b) => a - b); 16 | // 2. 获取合并后的长度 17 | let len = arr.length; 18 | // 3. 判断当前字符串是奇数个还是偶数个 19 | let isEven = len % 2 === 0; 20 | // 4. 根据奇偶分别计算 21 | if (isEven) { 22 | return (arr[Math.floor(len / 2) - 1] + arr[Math.floor(len / 2)]) / 2; 23 | } else { 24 | return arr[Math.floor(len / 2)]; 25 | } 26 | }; 27 | // @lc code=end 28 | -------------------------------------------------------------------------------- /tanxuan/48.旋转图像.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=48 lang=javascript 3 | * 4 | * [48] 旋转图像 5 | */ 6 | /** 7 | *左上角的点,绝对向右移动, 8 | 右上角的点,绝对向下移动, 9 | 右下角的点,绝对向左移动, 10 | 左下角的点,绝对向上移动, 11 | */ 12 | // @lc code=start 13 | /** 14 | * @param {number[][]} matrix 15 | * @return {void} Do not return anything, modify matrix in-place instead. 16 | */ 17 | var rotate = function(matrix) { 18 | let len = matrix.length; 19 | for (let i = 0; i < len / 2; i++) { 20 | let start = i; 21 | let end = len - i - 1; 22 | for (let j = 0; j < end - start; j++) { 23 | let temp = matrix[start][start + j]; 24 | matrix[start][start + j] = matrix[end - j][start]; 25 | matrix[end - j][start] = matrix[end][end - j]; 26 | matrix[end][end - j] = matrix[start + j][end]; 27 | matrix[start + j][end] = temp; 28 | } 29 | } 30 | }; 31 | // @lc code=end 32 | 33 | -------------------------------------------------------------------------------- /tanxuan/49.字母异位词分组.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=49 lang=javascript 3 | * 4 | * [49] 字母异位词分组 5 | */ 6 | /** 7 | * 1, 先将字符串排序成一样的 8 | * 2, map找到相同的索引 9 | * 3, 推入数组中 10 | */ 11 | // @lc code=start 12 | /** 13 | * @param {string[]} strs 14 | * @return {string[][]} 15 | */ 16 | var groupAnagrams = function(strs) { 17 | let arr = strs.map(item => { 18 | return item.split('').sort().join('') 19 | }) 20 | let res = [], obj = {} 21 | arr.forEach((item, index) => { 22 | if (obj[item]) { 23 | obj[item].push(index) 24 | } else { 25 | obj[item] = [] 26 | obj[item].push(index) 27 | } 28 | }) 29 | // console.log(obj) 30 | Object.keys(obj).forEach(item => { 31 | res.push(obj[item].map(it => { 32 | return strs[it] 33 | })) 34 | }) 35 | return res 36 | }; 37 | // @lc code=end 38 | 39 | -------------------------------------------------------------------------------- /tanxuan/53.最大子序和.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=53 lang=javascript 3 | * 4 | * [53] 最大子序和 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} nums 10 | * @return {number} 11 | */ 12 | var maxSubArray = function(nums) { 13 | let res = nums[0]; 14 | let sum = 0; 15 | for(let num of nums) { 16 | if (sum > 0) { 17 | sum += num; 18 | } else { 19 | sum = num; 20 | } 21 | res = Math.max(res, sum); 22 | } 23 | return res; 24 | }; 25 | // @lc code=end 26 | 27 | -------------------------------------------------------------------------------- /tanxuan/56.合并区间.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=56 lang=javascript 3 | * 4 | * [56] 合并区间 5 | */ 6 | 7 | /** 8 | * 1. 先排序 9 | * 2. 两两合并 / 改变左右区间值 10 | * 3. 推入最后一个 11 | */ 12 | // @lc code=start 13 | /** 14 | * @param {number[][]} intervals 15 | * @return {number[][]} 16 | */ 17 | var merge = function(intervals) { 18 | if (!intervals.length) { 19 | return [] 20 | } 21 | const res = [] 22 | const arr = intervals.sort((a, b) => a[0] - b[0]) 23 | let [left, right] = intervals[0], next; 24 | for(let i = 0; i 0, 15 | t = 0; 16 | // 不考虑符号将字符串反转 17 | t = Array.from(Math.abs(x) + '') 18 | .reverse() 19 | .join(''); 20 | 21 | // 修正符号位 22 | t = thanZero ? +t : -t; 23 | // 判断是否在区间内 24 | return t < 2 ** 31 - 1 && t > -(2 ** 31 - 1) ? t : 0; 25 | }; 26 | // @lc code=end 27 | -------------------------------------------------------------------------------- /tanxuan/70.爬楼梯.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=70 lang=javascript 3 | * 4 | * [70] 爬楼梯 5 | */ 6 | 7 | /** 8 | * 动态规划 9 | */ 10 | 11 | // @lc code=start 12 | /** 13 | * @param {number} n 14 | * @return {number} 15 | */ 16 | var climbStairs = function(n) { 17 | let arr = [0, 1]; 18 | let i = 0; 19 | while(i < n) { 20 | arr[i % 2] = arr[i % 2] + arr[(i + 1) % 2] 21 | i ++; 22 | } 23 | return arr[(i + 1) % 2] 24 | }; 25 | // @lc code=end 26 | 27 | -------------------------------------------------------------------------------- /tanxuan/8.字符串转换整数-atoi.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=8 lang=javascript 3 | * 4 | * [8] 字符串转换整数 (atoi) 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {string} str 10 | * @return {number} 11 | */ 12 | var myAtoi = function(str) { 13 | const INT_MIN = -(2 ** 31), 14 | INT_MAX = 2 ** 31 - 1; 15 | str = str.replace(/^\s*/, ''); 16 | // if (/^[+-]{2,}/.test(str)) { 17 | // return 0 18 | // } 19 | if (/^[+-]{0,1}[\d]+/.test(str)) { 20 | if (/^-\d/.test(str)) { 21 | let t = str.match(/^-\d*/); 22 | t = t - 0; 23 | return t > INT_MIN ? t : INT_MIN; 24 | } else { 25 | let t = str.match(/^[+\d][\d]*/); 26 | t = t - 0; 27 | return t < INT_MAX ? t : INT_MAX; 28 | } 29 | } else { 30 | return 0; 31 | } 32 | }; 33 | // @lc code=end 34 | -------------------------------------------------------------------------------- /tanxuan/80.删除排序数组中的重复项-ii.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Tan Xuan 3 | * @Date: 2020-02-21 10:15:56 4 | * @LastEditors: Tan Xuan 5 | * @LastEditTime: 2020-02-21 10:28:24 6 | * @Description: File content 7 | */ 8 | /* 9 | * @lc app=leetcode.cn id=80 lang=javascript 10 | * 11 | * [80] 删除排序数组中的重复项 II 12 | */ 13 | 14 | // @lc code=start 15 | /** 16 | * @param {number[]} nums 17 | * @return {number} 18 | */ 19 | var removeDuplicates = function(nums) { 20 | for(let i = 0; i < nums.length - 2;) { 21 | if (nums[i] === nums[i +1] && nums[i] === nums[i + 2]) { 22 | nums.splice(i+1, 1) 23 | } else { 24 | i += 1 25 | } 26 | } 27 | return nums.length 28 | }; 29 | // @lc code=end 30 | 31 | -------------------------------------------------------------------------------- /tanxuan/81.搜索旋转排序数组-ii.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Tan Xuan 3 | * @Date: 2020-02-21 10:48:16 4 | * @LastEditors: Tan Xuan 5 | * @LastEditTime: 2020-02-21 15:32:03 6 | * @Description: File content 7 | */ 8 | /* 9 | * @lc app=leetcode.cn id=81 lang=javascript 10 | * 11 | * [81] 搜索旋转排序数组 II 12 | */ 13 | /** 14 | * 15 | * 循环, 遍历 -> 没啥好说的 16 | */ 17 | // @lc code=start 18 | /** 19 | * @param {number[]} nums 20 | * @param {number} target 21 | * @return {boolean} 22 | */ 23 | var search = function(nums, target) { 24 | if (!nums.length) return false 25 | for(let i = 0; i < nums.length; i++) { 26 | if (nums[i] === target) { 27 | return true 28 | } 29 | } 30 | return false 31 | }; 32 | // @lc code=end 33 | 34 | -------------------------------------------------------------------------------- /tanxuan/88.合并两个有序数组.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=88 lang=javascript 3 | * 4 | * [88] 合并两个有序数组 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number[]} nums1 10 | * @param {number} m 11 | * @param {number[]} nums2 12 | * @param {number} n 13 | * @return {void} Do not return anything, modify nums1 in-place instead. 14 | */ 15 | var merge = function(nums1, m, nums2, n) { 16 | if (m == 0) { 17 | for (let i = 0; i < n; i++) { 18 | nums1[i] = nums2[i]; 19 | } 20 | return; 21 | } 22 | if (nums2[n - 1] > nums1[m - 1]) { 23 | nums1[m + n - 1] = nums2[n - 1]; 24 | merge(nums1, m, nums2, n - 1); 25 | } else { 26 | nums1[m + n - 1] = nums1[m - 1]; 27 | merge(nums1, m - 1, nums2, n); 28 | } 29 | }; 30 | // @lc code=end 31 | -------------------------------------------------------------------------------- /tanxuan/9.回文数.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @lc app=leetcode.cn id=9 lang=javascript 3 | * 4 | * [9] 回文数 5 | */ 6 | 7 | // @lc code=start 8 | /** 9 | * @param {number} x 10 | * @return {boolean} 11 | */ 12 | var isPalindrome = function(x) { 13 | x = x + ''; 14 | let len = x.length, 15 | i = Math.floor(len / 2); 16 | if (x < 0) { 17 | return false; 18 | } 19 | while (i >= 0) { 20 | if (x[i] !== x[len - i - 1]) { 21 | return false; 22 | } 23 | i--; 24 | } 25 | return true; 26 | }; 27 | // @lc code=end 28 | -------------------------------------------------------------------------------- /tanxuan/readMe.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/tanxuan/readMe.md -------------------------------------------------------------------------------- /wangchong/2019-11-03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wangchong/2019-11-03.jpg -------------------------------------------------------------------------------- /wangchong/2019-11-10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wangchong/2019-11-10.jpg -------------------------------------------------------------------------------- /wangchong/2019-11-17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wangchong/2019-11-17.jpg -------------------------------------------------------------------------------- /wangchong/2019-11-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wangchong/2019-11-24.png -------------------------------------------------------------------------------- /wangchong/2019-12-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wangchong/2019-12-01.jpg -------------------------------------------------------------------------------- /wangchong/2019-12-08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wangchong/2019-12-08.jpg -------------------------------------------------------------------------------- /wangchong/2019-12-15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wangchong/2019-12-15.jpg -------------------------------------------------------------------------------- /wangchong/2019-12-22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wangchong/2019-12-22.jpg -------------------------------------------------------------------------------- /wangchong/2019-12-29.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wangchong/2019-12-29.jpg -------------------------------------------------------------------------------- /wangchong/2020-01-03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wangchong/2020-01-03.jpg -------------------------------------------------------------------------------- /wangchong/2020-01-12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wangchong/2020-01-12.jpg -------------------------------------------------------------------------------- /wangchong/2020-01-19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wangchong/2020-01-19.jpg -------------------------------------------------------------------------------- /wangxianming/images/WX20191103-230353@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wangxianming/images/WX20191103-230353@2x.png -------------------------------------------------------------------------------- /wangxianming/images/WX20191110-162720@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wangxianming/images/WX20191110-162720@2x.png -------------------------------------------------------------------------------- /wangxianming/progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wangxianming/progress.png -------------------------------------------------------------------------------- /wangxianming/readMe.md: -------------------------------------------------------------------------------- 1 | https://github.com/68wangxianming/front-end-algorithm/tree/master/leetcode/code 2 | 3 | 完成题目: 4 | 1、2、10、17、85、89、459、557、605、682、696、914、5、6 5 | 6 | ![](https://github.com/68wangxianming/front-end-algorithm/blob/master/img/WX20191229-120001%402x.png) 7 | -------------------------------------------------------------------------------- /weixing/20191215.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/weixing/20191215.png -------------------------------------------------------------------------------- /weixing/WX20191222.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/weixing/WX20191222.png -------------------------------------------------------------------------------- /weixing/WX20191229.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/weixing/WX20191229.png -------------------------------------------------------------------------------- /weixing/WX20200105.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/weixing/WX20200105.png -------------------------------------------------------------------------------- /weixing/WX20200112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/weixing/WX20200112.png -------------------------------------------------------------------------------- /weixing/WX20200119.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/weixing/WX20200119.png -------------------------------------------------------------------------------- /weixing/WX20200202.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/weixing/WX20200202.png -------------------------------------------------------------------------------- /wuhaoran/11.盛最多水的容器.md: -------------------------------------------------------------------------------- 1 | # 盛最多水的容器 2 | 3 | ```javascript 4 | /** 5 | * @param {number[]} height 6 | * @return {number} 7 | */ 8 | var maxArea = function(height) { 9 | let maxvalue = 0; 10 | one: for (let i = 0; i < height.length; i++) { 11 | for (let j = height.length-1; j >= 0; j--) { 12 | if (j <= i) { 13 | continue one; 14 | } 15 | let short = Math.min(height[i], height[j]); 16 | let res = (j-i) * short; 17 | if (res > maxvalue) { 18 | maxvalue = res; 19 | } 20 | } 21 | } 22 | return maxvalue; 23 | }; 24 | ``` 25 | 26 | 理论上可以用双指针来解答,但是我依旧无法说服自己使用双指针,自己总是认为双指针的话会存在遗漏的面积。emm...等过段时间吧 -------------------------------------------------------------------------------- /wuhaoran/12.整数转罗马数字.md: -------------------------------------------------------------------------------- 1 | # 整数转罗马数字 2 | 3 | ```javascript 4 | /** 5 | * @param {number} num 6 | * @return {string} 7 | */ 8 | var intToRoman = function(num) { 9 | var maps = { 10 | 1:'I', 11 | 4:'IV', 12 | 5:'V', 13 | 9:'IX', 14 | 10:'X', 15 | 40:'XL', 16 | 50:'L', 17 | 90:'XC', 18 | 100:'C', 19 | 400:'CD', 20 | 500:'D', 21 | 900:'CM', 22 | 1000:'M' 23 | }; 24 | // 数字的数组序列化 并从大到小排序 便于后面的循环, 这里这句话根据题解的优化掉了 25 | var orders = Object.keys(maps).map(i => parseInt(i)).sort((a, b) => b-a); 26 | let res = ""; 27 | while(num > 0) { 28 | for (let i = 0; i < orders.length; i++) { 29 | const curr = orders[i] 30 | if (num >= curr) { 31 | res += maps[curr] 32 | num -= curr 33 | break; 34 | } 35 | } 36 | } 37 | return res 38 | }; 39 | ``` -------------------------------------------------------------------------------- /wuhaoran/121. 买卖股票的最佳时机.md: -------------------------------------------------------------------------------- 1 | ```js 2 | /** 3 | * @param {number[]} prices 4 | * @return {number} 5 | */ 6 | var maxProfit = function(prices) { 7 | if (!prices.length) { 8 | return 0; 9 | } 10 | const dp = []; 11 | // 第一天不能卖 12 | dp[0] = 0; 13 | // 可以买入的最小值 14 | let min = prices[0] 15 | for ( let i = 1; i < prices.length; i++ ) { 16 | // 得到最大利润 17 | dp[i] = Math.max(prices[i] - min, dp[i-1]); 18 | min = Math.min(prices[i], min); 19 | } 20 | return dp[prices.length - 1]; 21 | }; 22 | ``` -------------------------------------------------------------------------------- /wuhaoran/13.罗马数字转整数.md: -------------------------------------------------------------------------------- 1 | # 罗马数字转整数 2 | 3 | ```javascript 4 | /** 5 | * @param {string} s 6 | * @return {number} 7 | */ 8 | var romanToInt = function(s) { 9 | const maps = { 10 | I : 1, 11 | IV: 4, 12 | V: 5, 13 | IX: 9, 14 | X: 10, 15 | XL: 40, 16 | L: 50, 17 | XC: 90, 18 | C: 100, 19 | CD: 400, 20 | D: 500, 21 | CM: 900, 22 | M: 1000 23 | }; 24 | let res = 0; 25 | for(let i = 0; i < s.length; i++) { 26 | // 判断特殊的是否存在 如果存在按特殊的走 27 | if(i + 1 < s.length && maps[s.substring(i, i + 2)]) { 28 | console.log(maps[s.substring(i, i + 2)]) 29 | res += maps[s.substring(i, i + 2)]; 30 | // 跳过特殊项 这里i++必须在这里 31 | i++; 32 | } else { 33 | res += maps[s.substring(i, i + 1)]; 34 | } 35 | } 36 | return res; 37 | }; 38 | ``` 39 | 40 | 和上一个题的思路一致 依旧哈希 啊哈哈 贪心确实还木有学会 -------------------------------------------------------------------------------- /wuhaoran/14.最长公共前缀.md: -------------------------------------------------------------------------------- 1 | # 最长公共前缀 2 | 3 | 思路:先将第一个存进去,每一项遍历剩下相同的项。如果少了就再次赋值。 4 | 5 | ```javascript 6 | /** 7 | * @param {string[]} strs 8 | * @return {string} 9 | */ 10 | var longestCommonPrefix = function (strs) { 11 | var str = ""; 12 | var res = ""; 13 | var index = 0; 14 | 15 | for (var i = 0; i < strs.length; i++) { 16 | if (i === 0) { 17 | str = strs[i]; 18 | continue; 19 | } 20 | var j = 0; 21 | while (j < str.length && j < strs[i].length) { 22 | if (str.charAt(j) === strs[i].charAt(j)) { 23 | res += str.charAt(j); 24 | j++; 25 | } else { 26 | break; 27 | } 28 | } 29 | str = res; 30 | res = ""; 31 | 32 | } 33 | 34 | return str; 35 | }; 36 | ``` -------------------------------------------------------------------------------- /wuhaoran/17.电话号码的字母组合.md: -------------------------------------------------------------------------------- 1 | # 电话号码的字母组合 2 | 3 | 思路: 堆栈内存的转换,不过是按length增量级的。。。 4 | 5 | ```javascript 6 | /** 7 | * @param {string} digits 8 | * @return {string[]} 9 | */ 10 | var letterCombinations = function(digits) { 11 | var numarr = [ 12 | undefined, 13 | undefined, 14 | ['a', 'b', 'c'], 15 | ['d', 'e', 'f'], 16 | ['g', 'h', 'i'], 17 | ['j', 'k', 'l'], 18 | ['m', 'n', 'o'], 19 | ['p', 'q', 'r', 's'], 20 | ['t', 'u', 'v'], 21 | ['w', 'x', 'y', 'z'] 22 | ] 23 | var tmp = []; 24 | var res = []; 25 | for (var i = 0; i < digits.length; i++) { 26 | if (i === 0) { 27 | numarr[digits[i]].forEach(item => tmp.push(item)); 28 | } else { 29 | tmp.forEach(tmpItem => numarr[digits[i]].forEach(item => res.push(`${tmpItem}${item}`))) 30 | tmp = res; 31 | res = []; 32 | } 33 | } 34 | return tmp; 35 | }; 36 | ``` -------------------------------------------------------------------------------- /wuhaoran/20. 有效的括号.md: -------------------------------------------------------------------------------- 1 | ```js 2 | /** 3 | * @param {string} s 4 | * @return {boolean} 5 | */ 6 | var isValid = function(s) { 7 | const left = []; 8 | const proxy = { 9 | "{": "}", 10 | "(": ")", 11 | "[": "]" 12 | } 13 | for (let i = 0; i < s.length; i++) { 14 | // 推入另一边应该是的 15 | if (proxy[s[i]]) { 16 | left.unshift(proxy[s[i]]); 17 | } else { 18 | if (left.shift() == s[i]) { 19 | continue; 20 | } else { 21 | return false 22 | } 23 | } 24 | } 25 | return left.length === 0 26 | }; 27 | ``` -------------------------------------------------------------------------------- /wuhaoran/20191024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wuhaoran/20191024.png -------------------------------------------------------------------------------- /wuhaoran/20191103.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wuhaoran/20191103.png -------------------------------------------------------------------------------- /wuhaoran/20191110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wuhaoran/20191110.png -------------------------------------------------------------------------------- /wuhaoran/20191117.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wuhaoran/20191117.png -------------------------------------------------------------------------------- /wuhaoran/20191201.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wuhaoran/20191201.png -------------------------------------------------------------------------------- /wuhaoran/20191208.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/wuhaoran/20191208.png -------------------------------------------------------------------------------- /wuhaoran/21. 合并两个有序链表.md: -------------------------------------------------------------------------------- 1 | ```js 2 | /** 3 | * Definition for singly-linked list. 4 | * function ListNode(val) { 5 | * this.val = val; 6 | * this.next = null; 7 | * } 8 | */ 9 | /** 10 | * @param {ListNode} l1 11 | * @param {ListNode} l2 12 | * @return {ListNode} 13 | */ 14 | var mergeTwoLists = function(l1, l2) { 15 | const res = new ListNode(); 16 | 17 | let child = res; 18 | while (l1 != null && l2 != null) { 19 | // 有序链表的合并 20 | if (l1.val <= l2.val) { 21 | // 新链表next指向 22 | child.next = l1; 23 | // l1向下 24 | l1 = l1.next; 25 | } else { 26 | child.next = l2; 27 | l2 = l2.next; 28 | } 29 | // 新链表向下 30 | child = child.next; 31 | } 32 | // 看题解得到这个 l1或者l2可以有一个是非空的,所以在末尾链接上 33 | child.next = l1 == null ? l2 : l1; 34 | 35 | return res.next; 36 | }; 37 | ``` -------------------------------------------------------------------------------- /wuhaoran/26. 删除排序数组中的重复项.md: -------------------------------------------------------------------------------- 1 | 删除去重法 2 | ```js 3 | /** 4 | * @param {number[]} nums 5 | * @return {number} 6 | */ 7 | var removeDuplicates = function(nums) { 8 | let i = 1, leftNum = nums[0]; 9 | while(i < nums.length) { 10 | if (leftNum == nums[i]) { 11 | nums.splice(i, 1); 12 | } else { 13 | leftNum = nums[i]; 14 | i++; 15 | } 16 | } 17 | return nums.length; 18 | }; 19 | ``` 20 | 21 | 官方双指针 22 | ```js {10,11} 23 | /** 24 | * @param {number[]} nums 25 | * @return {number} 26 | */ 27 | var removeDuplicates = function(nums) { 28 | if (!nums.length) return; 29 | let i = 0; 30 | for (let j = 1; j < nums.length; j++) { 31 | if (nums[i] != nums[j]) { 32 | i++; 33 | nums[i] = nums[j]; 34 | } 35 | } 36 | // console.log(nums) 37 | return i + 1; 38 | }; 39 | ``` -------------------------------------------------------------------------------- /wuhaoran/53.最大子序和.md: -------------------------------------------------------------------------------- 1 | ```js 2 | /** 3 | * @param {number[]} nums 4 | * @return {number} 5 | */ 6 | var maxSubArray = function(nums) { 7 | const dp = []; 8 | dp[0] = nums[0]; 9 | // 每一次大的值 10 | let result = dp[0]; 11 | for (let i = 1; i < nums.length; i++) { 12 | // 寻找到一个错误的递归式 13 | // dp[i] = Math.max(dp[i-1], dp[i-1] + nums[i]) 14 | 15 | // 正确的递归式 得到每一项的最大 16 | dp[i] = Math.max(nums[i], dp[i-1] + nums[i]) 17 | // 记录最大值 18 | result = Math.max(result, dp[i]); 19 | } 20 | // console.log(dp) 21 | return result; 22 | }; 23 | ``` -------------------------------------------------------------------------------- /wuhaoran/70.爬楼梯.md: -------------------------------------------------------------------------------- 1 | ```js 2 | /** 3 | * @param {number} n 4 | * @return {number} 5 | */ 6 | var climbStairs = function(n) { 7 | // dp[i] = dp[i-1] + dp[i-2] 8 | // 寻找出口是dp[n]; 9 | // 0 return 0 10 | // 1 return 1 11 | // 2 return 2 12 | // 创建一个数组来存贮每个dp的值 13 | const dp = [0, 1, 2]; 14 | 15 | // 因为递归式是i-2和i-1 所以先把dp[1]和dp[2]设置上 16 | for (let i = 3; i <= n; i++) { 17 | dp[i] = dp[i-1] + dp[i-2]; 18 | } 19 | 20 | return dp[n]; 21 | }; 22 | ``` -------------------------------------------------------------------------------- /wuhaoran/readMe.md: -------------------------------------------------------------------------------- 1 | # LeetCode 之旅 2 | 3 | 观看以下题解建议 ```ctrl/command + 点击``` 或 ```右击在新窗口打开```; 4 | 5 | ## 题解 6 | - [**1.两数之和**](https://xiaoranzife.com/guide/arithmetic/1.TwoSum.html) 空间换时间 7 | - [**2.两数相加**](https://xiaoranzife.com/guide/arithmetic/2.AddTwoNumbers.html) 双指针,堆栈空间法 8 | - [**3.无重复字符的最长子串**](https://xiaoranzife.com/guide/arithmetic/3.lengthOfLongestSubstring.html) 滑动窗口 9 | 10 | ## 进度统计 11 | ![进度](./20191208.png) 12 | 13 | - 第一周进度: 3题 截止时间: 20191027 难度: 1简 2中 0难 14 | - 第二周进度: 6题 截止时间: 20191103 难度: 2简 3中 1难 15 | + 学习了递归法和分治法 16 | - 第三周进度: 3题 截止时间: 20191110 难度: 1简 2中 0难 17 | + 备注: 处理公司事务 18 | - 第三周进度: 2题 截止时间: 20191117 难度: 1简 1中 0难 19 | + 备注: 比较忙,三数之和尝试了思路不够 20 | - 第四周进度: 2题 截止时间: 20191124 难度: 2简 0中 0难 21 | + 备注: 处理私事,弄的比较少 链表这边考虑还是有一些不周到 22 | - 第五周进度: 3题 截止时间: 20191201 难度: 3简 0中 0难 23 | + 备注: 学习了动态规划,理解了最简单的基本思想 24 | - 第六周进度: 2题 截止时间: 20191208 难度: 2简 0中 0难 25 | + 备注: 无 26 | -------------------------------------------------------------------------------- /xianweiwu/2019-10-28/progress.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-10-28/progress.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-10-28/result1-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-10-28/result1-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-10-28/result1-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-10-28/result1-2.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-10-28/result3-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-10-28/result3-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-10-28/result3-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-10-28/result3-2.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-10-28/result7-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-10-28/result7-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-10-28/result7-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-10-28/result7-2.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-10-28/result8-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-10-28/result8-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-10-28/result9-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-10-28/result9-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-10-28/result9-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-10-28/result9-2.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-04/progress.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-04/progress.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-04/result13-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-04/result13-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-04/result14-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-04/result14-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-04/result15-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-04/result15-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-04/result2-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-04/result2-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-11/leetcode28.md: -------------------------------------------------------------------------------- 1 | ## 实现 strStr() 2 | 3 | > 实现 strStr() 函数。
4 | > 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回  -1。 5 | 6 | 示例1: 7 | ```text 8 | 输入: haystack = "hello", needle = "ll" 9 | 输出: 2 10 | ``` 11 | 12 | 示例2: 13 | ```text 14 | 输入: haystack = "aaaaa", needle = "bba" 15 | 输出: -1 16 | ``` 17 | 18 | - 解法 19 | - 解题思路: 通过正则匹配 20 | 21 | - 代码 22 | ```javascript 23 | /** 24 | * @param {string} haystack 25 | * @param {string} needle 26 | * @return {number} 27 | */ 28 | const strStr = function(haystack, needle) { 29 | const match = haystack.match(needle); 30 | return match ? match.index : -1; 31 | }; 32 | ``` 33 | 34 | - 测试结果 35 | ![](result28-1.jpg) 36 | 37 | - 算法分析 38 | - 时间复杂度: `O(nlogn)` 39 | - 空间复杂度: `O(1)` 40 | 41 | - 总结 42 | > 通过正则简单处理,但是不了解正则内部的实现。这部分还需要多研究研究。 -------------------------------------------------------------------------------- /xianweiwu/2019-11-11/progress.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-11/progress.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-11/result22-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-11/result22-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-11/result23-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-11/result23-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-11/result24-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-11/result24-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-11/result26-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-11/result26-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-11/result27-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-11/result27-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-11/result28-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-11/result28-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-11/result29-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-11/result29-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-11/result4-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-11/result4-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-18/progress.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-18/progress.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-18/result31-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-18/result31-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-18/result35-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-18/result35-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-25/progress.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-25/progress.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-25/result41-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-25/result41-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-11-25/result49-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-11-25/result49-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-02/leetcode53.md: -------------------------------------------------------------------------------- 1 | ## 最大子序和 2 | 3 | > 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 4 | 5 | 示例: 6 | ```text 7 | 输入: [-2,1,-3,4,-1,2,1,-5,4], 8 | 输出: 6 9 | 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 10 | ``` 11 | 12 | - 解法 13 | - 解题思路: 动态规划 14 | 1. 通过分析等到方程解:Max(当前值, 该数组上一个值 + 当前数组) 15 | 1. 通过一个数组,记录下当前下标是连续数组的最大值 16 | 2. 数该数组最大的一个值 17 | 18 | - 代码 19 | ```javascript 20 | /** 21 | * @param {number[]} nums 22 | * @return {number} 23 | */ 24 | const maxSubArray = function(nums) { 25 | if(nums.length <= 1) return nums.reduce((a, b) => a + b, 0); 26 | const arr = [nums[0]]; 27 | for(let i = 1; i< nums.length; i++){ 28 | arr[i] = Math.max(arr[i - 1] + nums[i], nums[i]) 29 | } 30 | return Math.max(...arr); 31 | }; 32 | ``` 33 | 34 | - 测试结果 35 | ![](result53-1.jpg) 36 | 37 | - 算法分析 38 | - 时间复杂度: `O(n)` 39 | - 空间复杂度: `O(n)` -------------------------------------------------------------------------------- /xianweiwu/2019-12-02/progress.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-02/progress.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-02/result13-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-02/result13-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-02/result38-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-02/result38-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-02/result53-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-02/result53-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-02/result58-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-02/result58-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-02/result58-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-02/result58-2.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-02/result58-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-02/result58-3.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-02/result58-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-02/result58-4.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-09/leetcode65.md: -------------------------------------------------------------------------------- 1 | ## 有效数字 2 | 3 | > 验证给定的字符串是否可以解释为十进制数字。
4 | > 例如:
5 | ```text 6 | "0" => true 7 | " 0.1 " => true 8 | "abc" => false 9 | "1 a" => false 10 | "2e10" => true 11 | " -90e3   " => true 12 | " 1e" => false 13 | "e3" => false 14 | " 6e-1" => true 15 | " 99e2.5 " => false 16 | "53.5e93" => true 17 | " --6 " => false 18 | "-+3" => false 19 | "95a54e53" => false 20 | ``` 21 | 22 | - 解法 23 | - 解题思路: 使用number的特性 24 | 25 | - 代码 26 | ```javascript 27 | /** 28 | * @param {string} s 29 | * @return {boolean} 30 | */ 31 | const isNumber = function(s) { 32 | s = s.trim(); 33 | if(s === '') return false; 34 | return !Number.isNaN(Number(s)); 35 | }; 36 | ``` 37 | 38 | - 测试结果 39 | ![](result65-1.jpg) 40 | 41 | - 算法分析 42 | - 时间复杂度: `O(1)` 43 | - 空间复杂度: `O(1)` -------------------------------------------------------------------------------- /xianweiwu/2019-12-09/progress.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-09/progress.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-09/result61-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-09/result61-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-09/result64-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-09/result64-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-09/result65-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-09/result65-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-09/result66-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-09/result66-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-16/progress.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-16/progress.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-16/result71-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-16/result71-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-16/result73-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-16/result73-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-23/progress.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-23/progress.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-23/result74-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-23/result74-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-23/result74-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-23/result74-2.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-30/progress.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-30/progress.jpg -------------------------------------------------------------------------------- /xianweiwu/2019-12-30/result92-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2019-12-30/result92-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2020-01-06/progress.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2020-01-06/progress.jpg -------------------------------------------------------------------------------- /xianweiwu/2020-01-06/result19-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2020-01-06/result19-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2020-01-13/leetcode125.md: -------------------------------------------------------------------------------- 1 | ## 验证回文串 2 | 3 | > 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
4 | > 说明:本题中,我们将空字符串定义为有效的回文串。 5 | 6 | 示例1: 7 | ```text 8 | 输入: "A man, a plan, a canal: Panama" 9 | 输出: true 10 | ``` 11 | 12 | 示例2: 13 | ```text 14 | 输入: "race a car" 15 | 输出: false 16 | ``` 17 | 18 | - 解法 19 | - 解题思路: 20 | 1. 去除掉除字母数字外其他的字符 21 | 2. 对比旋转过的字符与原字符 22 | 23 | - 代码 24 | ```javascript 25 | /** 26 | * @param {string} s 27 | * @return {boolean} 28 | */ 29 | const isPalindrome = function(s) { 30 | const filterStr = s.replace(/[^0-9a-zA-Z]/g, '').toLowerCase(); 31 | return filterStr === filterStr.split('').reverse().join(''); 32 | }; 33 | ``` 34 | 35 | - 测试结果 36 | ![](result125-1.jpg) 37 | 38 | - 算法分析 39 | - 时间复杂度: `O(n)` 40 | - 空间复杂度: `O(n)` -------------------------------------------------------------------------------- /xianweiwu/2020-01-13/progress.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2020-01-13/progress.jpg -------------------------------------------------------------------------------- /xianweiwu/2020-01-13/result125-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2020-01-13/result125-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2020-01-20/leetcode136.md: -------------------------------------------------------------------------------- 1 | ## 只出现一次的数字 2 | 3 | > 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。
4 | > 找出那个只出现了一次的元素。 5 | 6 | 示例1: 7 | ```text 8 | 输入: [2,2,1] 9 | 输出: 1 10 | ``` 11 | 12 | 示例2: 13 | ```text 14 | 输入: [4,1,2,1,2] 15 | 输出: 4 16 | ``` 17 | 18 | - 解法 19 | - 解题思路: 20 | 1. 使用哈希表对元素进行增加以及删除操作 21 | 2. 当该哈希存在这个元素进行删除,否则将值添加到哈希表中 22 | 3. 此时哈希只有一个值,输出该值 23 | 24 | - 代码 25 | ```javascript 26 | /** 27 | * @param {number[]} nums 28 | * @return {number} 29 | */ 30 | const singleNumber = function(nums) { 31 | const store = {}; 32 | for(let i = 0; i < nums.length; i++){ 33 | if(typeof store[nums[i]] === 'undefined'){ 34 | store[nums[i]] = nums[i]; 35 | }else{ 36 | delete store[nums[i]]; 37 | } 38 | } 39 | return +Object.keys(store)[0]; 40 | }; 41 | ``` 42 | 43 | - 测试结果 44 | ![](result136-1.jpg) 45 | 46 | - 算法分析 47 | - 时间复杂度: `O(n)` 48 | - 空间复杂度: `O(n)` -------------------------------------------------------------------------------- /xianweiwu/2020-01-20/progress.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2020-01-20/progress.jpg -------------------------------------------------------------------------------- /xianweiwu/2020-01-20/result136-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2020-01-20/result136-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2020-02-03/progress.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2020-02-03/progress.jpg -------------------------------------------------------------------------------- /xianweiwu/2020-02-03/result144-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2020-02-03/result144-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2020-02-03/result145-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2020-02-03/result145-1.jpg -------------------------------------------------------------------------------- /xianweiwu/2020-02-10/progress.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2020-02-10/progress.jpg -------------------------------------------------------------------------------- /xianweiwu/2020-02-10/result134-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xianweiwu/2020-02-10/result134-1.jpg -------------------------------------------------------------------------------- /xiaoen/2019-10-28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xiaoen/2019-10-28.png -------------------------------------------------------------------------------- /xiaoen/2019-11-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xiaoen/2019-11-04.png -------------------------------------------------------------------------------- /xiaoen/2019-11-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xiaoen/2019-11-11.png -------------------------------------------------------------------------------- /xiaoen/2019-11-18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xiaoen/2019-11-18.png -------------------------------------------------------------------------------- /xiaoen/2019-11-25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xiaoen/2019-11-25.png -------------------------------------------------------------------------------- /xiaoen/2019-12-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xiaoen/2019-12-02.png -------------------------------------------------------------------------------- /xiaoen/2019-12-09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/xiaoen/2019-12-09.png -------------------------------------------------------------------------------- /yangchenjing/122.买卖股票的最佳时机 II.md: -------------------------------------------------------------------------------- 1 | 122.买卖股票的最佳时机 II 2 | 3 | 题目描述:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 4 | 5 | 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 6 | 7 | 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 8 | 9 | 示例 1: 10 | 11 | ``` 12 | 输入: [7,1,5,3,6,4] 13 | 输出: 7 14 | 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 15 | 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。 16 | ``` 17 | 18 | **示例 2:** 19 | 20 | ``` 21 | 输入: [1,2,3,4,5] 22 | 输出: 4 23 | 解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 24 | 注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。 25 | 因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。 26 | ``` 27 | 28 | **示例 3:** 29 | 30 | ``` 31 | 输入: [7,6,4,3,1] 32 | 输出: 0 33 | 解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。 34 | ``` 35 | 36 | 题解:这道题,刚开始 看的时候,感觉会有一些复杂,可能是因为 自己的思路不太清晰,但是 ,看了官方题解的图示,就很清晰了,贪心算法,只求出每一段的数据变化,取出其中收益的那些部分,并把它们加到一起,就是最终答案了,上代码 -------------------------------------------------------------------------------- /yangchenjing/125.验证回文串.md: -------------------------------------------------------------------------------- 1 | 125.验证回文串 2 | 3 | 题目描述:给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 4 | 5 | **说明:**本题中,我们将空字符串定义为有效的回文串。 6 | 7 | **示例 1:** 8 | 9 | ``` 10 | 输入: "A man, a plan, a canal: Panama" 11 | 输出: true 12 | ``` 13 | 14 | **示例 2:** 15 | 16 | ``` 17 | 输入: "race a car" 18 | 输出: false 19 | ``` 20 | 21 | 题解:首先处理字符串,把字符串中的数字和字母,全都提取出来(replace),然后整理字符串,全都转成大写或是 小写(toUpperCase,toLowerCase)在使用split,把它转成字符串数组,看看把它拼接成字符串 与 把他翻转在拼接成字符串是否相等,上代码 22 | 23 | ``` 24 | /** 25 | * @param {string} s 26 | * @return {boolean} 27 | */ 28 | var isPalindrome = function(s) { 29 | var strArr=s.replace(/[^0-9a-zA-Z]/g,'').toLowerCase().split(''); 30 | return strArr.join('')==strArr.reverse().join('') 31 | }; 32 | ``` 33 | 34 | -------------------------------------------------------------------------------- /yangchenjing/137.只出现一次的数字 II.md: -------------------------------------------------------------------------------- 1 | 137.只出现一次的数字 II 2 | 3 | 题目描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。 4 | 5 | 说明: 6 | 7 | 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 8 | 9 | 示例 1: 10 | 11 | ``` 12 | 输入: [2,2,3,2] 13 | 输出: 3 14 | ``` 15 | 16 | **示例 2:** 17 | 18 | ``` 19 | 输入: [0,1,0,1,0,1,99] 20 | 输出: 99 21 | ``` 22 | 23 | 题解:这题跟136用的解法是一样的...真尴尬。直接上代码吧 24 | 25 | ``` 26 | /** 27 | * @param {number[]} nums 28 | * @return {number} 29 | */ 30 | var singleNumber = function(nums) { 31 | var len=nums.length; 32 | if(len==1){ 33 | return nums[0] 34 | } 35 | for(var i=0;ilen/2)return nums[i] 39 | } 40 | }; 41 | ``` 42 | 43 | -------------------------------------------------------------------------------- /yangchenjing/189.旋转数组.md: -------------------------------------------------------------------------------- 1 | 189.旋转数组 2 | 3 | 题目描述: 给定一个数组,将数组中的元素向右移动 *k* 个位置,其中 *k* 是非负数。 4 | 5 | **示例 1:** 6 | 7 | ``` 8 | 输入: [1,2,3,4,5,6,7] 和 k = 3 9 | 输出: [5,6,7,1,2,3,4] 10 | 解释: 11 | 向右旋转 1 步: [7,1,2,3,4,5,6] 12 | 向右旋转 2 步: [6,7,1,2,3,4,5] 13 | 向右旋转 3 步: [5,6,7,1,2,3,4] 14 | ``` 15 | 16 | **示例 2:** 17 | 18 | ``` 19 | 输入: [-1,-100,3,99] 和 k = 2 20 | 输出: [3,99,-1,-100] 21 | 解释: 22 | 向右旋转 1 步: [99,-1,-100,3] 23 | 向右旋转 2 步: [3,99,-1,-100] 24 | ``` 25 | 26 | 题解:想了一种操作数组的最简单的办法,每一次区数组的最后一个元素,用pop方法,把他取出来,并且会改变原数组,并将它 unshift 到数组的第一位去,k等于几,就运行几次方法,下面上代码 27 | 28 | ``` 29 | /** 30 | * @param {number[]} nums 31 | * @param {number} k 32 | * @return {void} Do not return anything, modify nums in-place instead. 33 | */ 34 | var rotate = function(nums, k) { 35 | for(var i = 0;inums[nums.length-1]){ 48 | return nums.length 49 | } 50 | } 51 | }; 52 | ``` 53 | 54 | -------------------------------------------------------------------------------- /yangchenjing/53.最大子序和.md: -------------------------------------------------------------------------------- 1 | 53.最大子序和 2 | 3 | 题目描述:给定一个整数数组 `nums` ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 4 | 5 | **示例:** 6 | 7 | ``` 8 | 输入: [-2,1,-3,4,-1,2,1,-5,4], 9 | 输出: 6 10 | 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 11 | ``` 12 | 13 | **进阶:** 14 | 15 | 如果你已经实现复杂度为 O(*n*) 的解法,尝试使用更为精妙的分治法求解。 16 | 17 | 题解:这题试了好多种方法,后面看了别人的解法,发现自己是真的...判断总和是否大于0,如果大于0证明是有增加的,加上数组中的数值,在与原来的总和进行对比,取大的那一个,如果总和小于0,证明这些数没有增益,直接将数组中的数赋值给总和,在于原来的总和对比(这里设数组的第一个数值为总和的初值),下面上代码会更清晰一些 18 | 19 | ``` 20 | /** 21 | * @param {number[]} nums 22 | * @return {number} 23 | */ 24 | var maxSubArray = function(nums) { 25 | var sum=0; 26 | var maxNums=nums[0]; 27 | for(const num of nums){ 28 | if(sum>0){ 29 | sum+=num 30 | }else{ 31 | sum=num 32 | } 33 | maxNums=Math.max(maxNums,sum) 34 | } 35 | return maxNums; 36 | // console.log(maxNums) 37 | } 38 | ``` 39 | 40 | -------------------------------------------------------------------------------- /yangchenjing/58.最后一个单词的长度.md: -------------------------------------------------------------------------------- 1 | 58.最后一个单词的长度 2 | 3 | 题目描述:给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。 4 | 5 | 如果不存在最后一个单词,请返回 0 。 6 | 7 | 说明:一个单词是指由字母组成,但不包含任何空格的字符串。 8 | 9 | 示例: 10 | 11 | ``` 12 | 输入: "Hello World" 13 | 输出: 5 14 | ``` 15 | 16 | 题解:根据题意求最后一个单词,先把 字符串的收尾 空格去掉(trim()方法),然后把它变为数组,并反序处理,循环到第一个空格的位置,停止循环,把它截取并反序回来拼接上,上代码 17 | 18 | ``` 19 | var lengthOfLastWord = function(s) { 20 | var news=Array.from(s.trim()).reverse(); 21 | for(var i=0;i-1){ 23 | console.log(i) 24 | news=news.slice(0,i); 25 | break; 26 | } 27 | } 28 | return news.reverse().join('').length; 29 | }; 30 | ``` 31 | 32 | -------------------------------------------------------------------------------- /yangchenjing/66.加一.md: -------------------------------------------------------------------------------- 1 | 66.加一 2 | 3 | 题目描述:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 4 | 5 | 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 6 | 7 | 你可以假设除了整数 0 之外,这个整数不会以零开头。 8 | 9 | **示例 1:** 10 | 11 | ``` 12 | 输入: [1,2,3] 13 | 输出: [1,2,4] 14 | 解释: 输入数组表示数字 123。 15 | ``` 16 | 17 | **示例 2:** 18 | 19 | ``` 20 | 输入: [4,3,2,1] 21 | 输出: [4,3,2,2] 22 | 解释: 输入数组表示数字 4321。 23 | ``` 24 | 25 | 题解:其实 当刚看到提的时候,感觉很简单,把它转成字符串,在转成数字 +1 再转回来 就好了,可是 ,当用了Number之后 ,发现 有 边界限制,有个最大数值,大于这个数值 ,他就自动转成0了,可以自己尝试一下,看了下题解,有另一个内置的方法BigInt,这个方法,就没有这种边界的限制,但是字符串转成数字后,会在结尾+个n 做加法的时候 要加1n 才可以,直接 +1会报错,其他就没什么区别了,上代码 26 | 27 | ``` 28 | var plusOne = function(digits) { 29 | var newd=Array.from(BigInt(BigInt(digits.join(''))+1n)+'') 30 | return newd 31 | }; 32 | ``` 33 | 34 | -------------------------------------------------------------------------------- /yangchenjing/69.x 的平方根.md: -------------------------------------------------------------------------------- 1 | 69.x 的平方根 2 | 3 | 题目描述:实现 int sqrt(int x) 函数。 4 | 5 | 计算并返回 x 的平方根,其中 x 是非负整数。 6 | 7 | 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 8 | 9 | 示例 1: 10 | 11 | ``` 12 | 输入: 4 13 | 输出: 2 14 | ``` 15 | 16 | **示例 2:** 17 | 18 | ``` 19 | 输入: 8 20 | 输出: 2 21 | 说明: 8 的平方根是 2.82842..., 22 | 由于返回类型是整数,小数部分将被舍去 23 | ``` 24 | 25 | 题解:开方,向下取整,根据题意,上代码 26 | 27 | ``` 28 | var mySqrt = function(x) { 29 | return Math.floor(Math.sqrt(x)) 30 | }; 31 | ``` 32 | 33 | -------------------------------------------------------------------------------- /yangchenjing/9.回文数.md: -------------------------------------------------------------------------------- 1 | 9.回文数 2 | 3 | 题目描述: 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 4 | 5 | **示例 1:** 6 | 7 | ``` 8 | 输入: 121 9 | 输出: true 10 | ``` 11 | 12 | 示例 2: 13 | 14 | ``` 15 | 输入: -121 16 | 输出: false 17 | 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 18 | ``` 19 | 20 | 示例 3: 21 | 22 | ``` 23 | 输入: 10 24 | 输出: false 25 | 解释: 从右向左读, 为 01 。因此它不是一个回文数。 26 | ``` 27 | 28 | **进阶:** 29 | 30 | 你能不将整数转为字符串来解决这个问题吗? 31 | 32 | 解题思路,这个跟第7题解题方法一样,求出x的倒序,判断两数大小是否相等即可, 33 | 34 | 进阶的解法,还没有想出 35 | 36 | ``` 37 | /** 38 | * @param {number} x 39 | * @return {boolean} 40 | */ 41 | var isPalindrome = function(x) { 42 | if(x<0){ 43 | return false 44 | }else{ 45 | var num=Number(Array.from(Math.abs(x)+'').reverse().join('')) 46 | if(x==num){ 47 | return true 48 | }else{ 49 | return false 50 | } 51 | } 52 | }; 53 | ``` 54 | 55 | -------------------------------------------------------------------------------- /yangchenjing/progress.md: -------------------------------------------------------------------------------- 1 | ## progress 2 | 3 | ### 第1周 10.28 - 11.03 4 | 5 | - 题目序号: 1,4,7,9 6 | 7 | ### 第2周 11.04 - 11.10 8 | 9 | - 题目序号: 3,8 10 | 11 | ### 第3周 11.11 - 11.17 12 | 13 | - 题目序号: 11,12,13 14 | 15 | ### 第4周 11.18 - 11.24 16 | 17 | - 题目序号: 20,27,28 18 | 19 | ### 第5周 11.25 - 12.1 20 | 21 | - 题目序号: 26,35 22 | 23 | ### 第6周 12.2 - 12.8 24 | 25 | - 题目序号: 58,66,69 26 | 27 | ### 第7周 12.9 - 12.15 28 | 29 | - 题目序号: 84,121 30 | 31 | ### 第8周 12.16 - 12.22 32 | 33 | - 题目序号: 122,125 34 | 35 | ### 第9周 12.23 - 12.29 36 | 37 | - 题目序号: 136,137 38 | 39 | ### 第10周 12.30 - 1.5 40 | 41 | - 题目序号: 94,144,145 42 | 43 | ### 第11周 1.6 - 1.12 44 | 45 | - 题目序号: 53,189 46 | 47 | ### 第12周 1.13 - 1.19 48 | 49 | - 题目序号: 14,15 50 | 51 | ### 第13周 1.20 - 2.2 52 | 53 | - 题目序号: 141,191 54 | 55 | ### 第13周 2.3-2.9 56 | 57 | - 题目序号: 167 58 | -------------------------------------------------------------------------------- /yangchenjing/readMe.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xianweics/leetcode/33c746a09526621067d2cb04c8815f74e318879b/yangchenjing/readMe.md --------------------------------------------------------------------------------