单向列表拼接

# Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

# Example:
# Input: 1 -> 2 -> 4, 1 -> 3 -> 4
# Output: 1 -> 1 -> 2 -> 3 -> 4 -> 4

# 来源:力扣(LeetCode)
# 链接:https: // leetcode-cn.com/problems/merge-two-sorted-lists

# Definition for singly-linked list.

class ListNode:
def __init__(self, x):
self.val = x
self.next = None

class Solution:
def mergeTwoLists(self, l1, l2):
prehead = ListNode(-1)

prev = prehead
while l1 and l2:
if l1.val <= l2.val:
prev.next = l1
l1 = l1.next
else:
prev.next = l2
l2 = l2.next
prev = prev.next
prev.next = l1 if l1 is not None else l2

return prehead.next

def __init__(self, arr1, arr2):
n1 = ListNode(arr1[0])
x1 = ListNode(arr2[0])
self.mergeTwoLists(n1, x1)
print(self.mergeTwoLists(n1, x1).val)

Solution([1, 2, 4], [1, 3, 4])

阅读全文

括号匹配

# 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

# 有效字符串需满足:
# 左括号必须用相同类型的右括号闭合。
# 左括号必须以正确的顺序闭合。
# 注意空字符串可被认为是有效字符串。

# 示例 1:
# 输入: "()"
# 输出: true

# 示例 2:
# 输入: "()[]{}"
# 输出: true

# 示例 3:
# 输入: "(]"
# 输出: false

# 示例 4:
# 输入: "([)]"
# 输出: false

# 示例 5:
# 输入: "{[]}"
# 输出: true

# 来源:力扣(LeetCode)
# 链接:https: // leetcode-cn.com/problems/valid-parentheses


class Solution:
def isValid(self, s):
# 简洁但是效率低
# while '{}' in s or '()' in s or '[]' in s:
# s = s.replace('{}', '')
# s = s.replace('[]', '')
# s = s.replace('()', '')
# return s == ''
stack = [] # 初始化栈
mapping = {')': '(', ']': '[', '}': '{'} # 字典存储所有的匹配类型
for char in s: # 遍历字符串
if (char in mapping): # 当前字符为闭合符号时
top_element = stack.pop() if stack else '#' # 栈顶元素出栈
if mapping[char] != top_element: # 没有匹配的类型,返回 false
return False
else:
stack.append(char) # 开括号存储到栈里
return not stack

def _init_(self):
return self.isValid("([)]")

res = Solution()
print(res._init_())

阅读全文

下拉列表的实现

用别人的组件总有各种不可控的问题,而且不好维护,还是造轮子比较舒畅。

下拉列表是工作中经常用到的一个功能,点击按钮,显示下拉列表,点击列表中的项目显示对应的值到按钮中,这是下拉列表的常用交互。这里的一个比较有意思的点就是如何在点击别的地方时关闭列表。我采用的方法是监听组件最外层的 blur 事件,当该组件失去焦点时,关闭列表。由于按钮用的是 div 实现,默认 div 是没有 blur 事件的,这里添加一个 tabindex 属性, blur 就有效了。

阅读全文

Canvas 画动态路径

这个函数是一个用于画 canvas 路径的,也就是把 canvas 画线的过程演示出来的一个东东。采用的是纯 js 和 canvas 描绘方法。当然前提是得有路径的点集,不然画不了。

阅读全文

Npm 常用命令

1、安装

npm i <package>

npm i <package> -g

npm i <package> --save-dev

npm install @myco/my-package

阅读全文

nodeJs 模块

nodeJS 模块化编程指的是将一些通用的功能转移到不同的文件里,每个文件作为一个模块,暴露给其他文件使用。这样可以使代码更容易维护,更具通用性。

阅读全文

正则

一、正则表达式是什么

正则表达式就是记录文本规则的代码。

// 匹配中国的电话号码
0\d\d-\d\d\d\d\d\d\d\d
0\d{2}-\d{8}

阅读全文

Webpack

一、安装

1. 本地安装

# webpack 4+ 版本
npm install --save-dev webpack-cli
npm install --save-dev webpack

# 安装指定版本
npm install --save-dev webpack@<version>

阅读全文

Github + Travis 自动构建 Vue 项目到 Gitpage

github + travis 自动构建 vue 项目到 gitpage

阅读全文

四个JS小技巧

一、尽早结束

function transformData(rawData) {
// check if no data
if (!rawData) {
return [];
}

// check for specific case
if (rawData.length == 1) {
return [];
}

// actual function code goes here
return rawData.map(item => item);
}

阅读全文