Python转JS,记录一些刷Leetcode题常用套路和两种语言的不同用法
1. array.push(val)
数组尾部增加元素,返回新数组长度
坑:
现有一个空数组res,一个长度时刻改变的数组temp。
需求:当temp的长度为3时,res.push(temp)
本以为每次push完,res里的元素会是每次长度为3时的temp(如[[1,2,3],[4,5,6],[7,8,9]]),
结果实际上每次res里的元素是temp里最后一次的值(如[[7,8,9],[7,8,9],[7,8,9]])
原因:
每次向res数组中Push的都是对temp数组的引用,所以temp[0]和temp[1]和temp[2]的引用都是同一个,值自然也一样了。
解决办法:
每次都深拷贝一次temp数组,令其为temp1,把引用不同但值相同的数组temp1加入res.
深拷贝方法:
temp1 = temp.slice(0)
这个方法有点蠢,如果大家有更好的办法欢迎与我讨论。
2. array.pop()
数组尾部删除元素,返回被删除元素
3.array.unshift(val)
数组头部增加元素,返回新数组长度
4.array.shift()
数组头部删除元素,返回被删除元素
5.Infinity
无穷大,用法:如 let nums = [Infinity] 用于比大小
6.array.indexOf(val)
找到返回下标,找不到返回-1
7.直接min(a,b)报错,要Math.min(a,b)
8.array.reverse()
反转数组
9.str.slice(a,b)
切片[a,b),不改变原数组
10.str.splice(a,b)
切片[a,b),改变原数组
str.splice(a,a+1,'n') 把索引为a的字符替换为n
11.array.join("-")
将字符串数组拼接为字符串,拼接符为 -
12.正则表达式str.split(/\s+/)
按字符串中所有长度的空格分割成字符数组
\s
表示空白符
+
表示出现至少一次。
13.数组正序
nums.sort((a, b) => a - b);
P.S array.sort()有一个可选参数,是用来确定元素顺序的函数。如果这个参数被省略,那么数组中的元素将按照ASCII字符顺序进行排序。比如“10”会在“2”前面。
14.数组倒序
nums.sort((a, b) => b - a);
15.长度
arr.length
P.S python写惯了总会写成 len(arr),避坑
16.str.trim()
去除字符两端的空格
17.str.repeat(times)
把str重复times遍并拼接输出
18.Map对象(js中只有Map,没有HashMap)
添加元素:set()
判断是否存在:has()
获取value:get()
var hashTable = new Map();
for(let i =0 ;i<nums.length;i++){
if(hashTable.has(nums[i])){
return nums[i]
}else{
hashTable.set(nums[i], 1);
}
}
19.二分查找的几个模板
def shipWithinDays(self, weights: List[int], days: int) -> int:
left = max(weights)-1
right = sum(weights)+1
while(left+1!=right):
m = (left+right)//2
res = 0
total = 0
for i in range(0,len(weights)):
if(total+weights[i]<=m):
total += weights[i]
else:
total = weights[i]
res+=1
if(total<=m):
res+=1
if(res>days):
left = m
else:
right = m
return right
function BinarySearch(arr,item) {
var left = 0,
right = arr.length-1
while(left<=right){
var mid = Math.floor((left+right)/2)
if(arr[mid] == item){
return mid
}
else if(arr[mid]>item){
right = mid-1
}
else{
left = mid+1
}
}
return false
}
20. 判断元素是否为数组
Array.isArray() 用于确定传递的值是否是一个数组。如果是数组,则返回true,否则为false。
21.判断元素类型
alert(typeof a)
22. 展开语法(...)
展开语法(Spread syntax), 可以在函数调用/数组构造时, 将数组表达式或者string在语法层面展开;还可以在构造字面量对象时, 将对象表达式按key-value的方式展开。(译者注: 字面量一般指 [1, 2, 3]
或者 {name: "mdn"}
这种简洁的构造方式)
function sum(x, y, z) {
return x + y + z;
}
const numbers = [1, 2, 3];
console.log(sum(...numbers));
// expected output: 6
console.log(sum.apply(null, numbers));
// expected output: 6
23.创建数组
var arr = []; //创建一个空数组
var arr1 = new Array(); //创建空数组
24.求字符的ASCII码
str.charCodeAt(i)
# i为字符串str中某个字符的index。
# 小写字母:
password.charCodeAt(i)>96 && password.charCodeAt(i)<123
# 大写字母:
password.charCodeAt(i)>64 && password.charCodeAt(i)<91
# 数字:
password.charCodeAt(i)>47 && password.charCodeAt(i)<58