leetcode刷题难点+知识点
1.python中-> List[int] 是什么意思?
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
"->"符号的意义:是一个叫做返回值注解的符号。它通过允许将元数据附加到描述其参数和返回值的函数来扩展该功能。
-> List[int]:常常出现在python函数定义的函数名后面,为函数添加元数据,描述函数的返回类型,从而方便开发人员使用。
这里是指:元数据表明了函数的返回值为int类型。
2.(self, nums: List[int]) -> int: 是什么意思?
为了说明参数和返回值的数据类型,添加参数和返的值类型方面函数的调用
3.enumerate() 函数
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
# 普通的 for 循环
i = 0
seq = ['one', 'two', 'three']
for element in seq:
print(i, seq[i])
i += 1
输出结果为:
0 one
1 two
2 three
# for 循环使用 enumerate
seq = ['one', 'two', 'three']
for i, element in enumerate(seq):
print(i, element)
输出结果为:
0 one
1 two
2 three
4.栈的出入,stack[-1]什么意思?
not stack 是指空栈
stack[-1] 是指栈顶
list = [1,2,3,4]
stack = []
print("列表第一个数:",list[0])
print("列表第二个数:",list[1])
print("列表第三个数:",list[2])
print("列表第四个数:",list[3])
stack.append(list[0])# 第一个数入栈
stack.append(list[1])# 第二个数入栈
stack.append(list[2])# 第三个数入栈
stack.append(list[3])# 第四个数入栈
if not stack:# 如果是空栈,则打印空栈
print("空栈")
else:
print(stack[-1])# 打印栈顶数4
stack.pop()# 数4出栈
print(stack[0])
print(stack[1])
print(stack[2])
print(stack[-1])# 打印栈顶数3
5.lambda和reduce联合使用
>>> L = [1,2,3,4]
>>> sum = reduce(lambda x,y:x+y,L)
>>> sum
10
reduce(lambda x,y:x+y, [1,2,3]) #6
reduce(lambda x,y:x * y, [1,2,4]) #8
reduce(lambda x,y: x and y, [True,False,True]) #False
def f(x,y):
return x+y
reduce(lambda x,y:f(x,y), [1,2,3]) #6
lambda函数的语法只包含一个语句,如下: lambda arg1,arg2,…argn:expression(主要是看下面的例子)
代码示例:
#普通python函数
def func(a,b,c):
return a+b+c
print func(1,2,3)
#返回值为6
#lambda匿名函数
f = lambda a,b,c:a+b+c
print f(1,2,3)
返回结果为6
大家注意观察上面的Python示例代码,f = lambda a,b,c:a+b+c 中的关键字lambda表示匿名函数,
冒号:之前的a,b,c表示它们是这个函数的参数。
匿名函数不需要return来返回值,表达式本身结果就是返回值。
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(列表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第3个数据用 function 函数运算,最后返回一个结果。
语法
functools.reduce() 函数语法:
functools.reduce(function, iterable[, initializer])
假设function为bin_func,iterable为seq,则functools.reduce( bin_func, seq ) 的执行流程为:

6.关于解释"List< Integer> vals = new ArrayList< Integer>()";
List vals = new ArrayList< Integer>() 注意:为了显示 Interger 有空格
List< Integer>
List是一个接口
<>表示了List里面放的对象是什么类型的,这样写就表示了,你List里面放的必须是Integer类型的
<>里面的是java里的泛型,泛型就是基本类型(int,char,float等等)在java中的封装的那几个(Integer,Character等等)
<>作用就是确定到底存放什么类型
Integer是java为int提供的封装类。
int是java提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,int的默认值为0,而Integer的默认值为null
Integer提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer中还定义了表示整数的最大值和最小值的常量。
Java.util.ArrayList类是一个动态数组类型,ArrayList对象既有数组的特征,也有链表的特征。可以随时从链表中添加或删除一个元素。ArrayList实现了List接口。
关于ArrayList
ArrayList类是一个特殊的数组–动态数组。通过添加和删除元素,就可以动态改变数组的长度。
优点:
1、支持自动改变大小 2、可以灵活的插入元素 3、可以灵活的删除元素
局限:
比一般的数组的速度慢一些;
ArrayList是List接口的一个实现类。
ArrayList类是继承AbstractList抽象类和实现List接口的一个实现类。
因此,List接口不能被构造,也就是我们说的不能创建实例对象,但是我们可以像下面那
样为List接口创建一个指向自己的对象引用,而ArrayList实现类的实例对象就在这充当了
这个指向List接口的对象引用。
这句代码的目的是 可以调用 List接口里面的内置函数,add,get等方法;
7.next()、nextLine()、nextInt()
Scanner 使用分隔符模式将其输入分解为标记,然后可以使用不同的 next 方法将得到的标记转换为不同类型的值
区别:对于空格的处理方式不同,返回值不同。
nextLine():将空格看作字符串的一部分,作为String类型一并返回;
next():将空格看作是两个字符串的间隔,读取输入内容直到遇到空格。它不能读取两个字符之间的空格。
nextInt():与next()方法类似,返回值int类型,将空格作是两个输入数据的间隔
8.Java中Scanner输入
通过 Scanner 类来获取用户的输入。
import java.util.*;
public class ScannerProject {
public static void main(String[] args){
Scanner in = new Scanner(System.in);//定义scanner,等待输入
System.out.println("请输入内容:");
String s = in.nextLine();//读取输入内容
System.out.println(s);
}
}
LeetCode-题型
62. 不同路径
/**
* 62. 不同路径
* 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
* 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
* 问总共有多少条不同的路径?
* 示例 1:输入:m = 3, n = 7,输出:28
* 示例 2:输入:m = 3, n = 2,输出:3
*/
import java.util.*;
public class UniquePaths {
public int uniquePaths(int m, int n) {
int[][] f = new int[m][n];
for(int i=0; i<m; i++){
f[i][0] = 1;
}
for(int j=0; j<n; j++){
f[0][j] = 1;
}
for(int i=1; i<m; i++){
for(int j=1; j<n; j++){
f[i][j] = f[i-1][j] + f[i][j-1];
}
}
return f[m-1][n-1];
}
public static void main(String[] args){
UniquePaths val = new UniquePaths();
Scanner in1 = new Scanner(System.in);
System.out.println("请输入m和n:");
int m = in1.nextInt();
int n = in1.nextInt();
System.out.println("m="+ m +","+ "n=" + n);
int t = val.uniquePaths(m,n);
System.out.println(t);
}
}
s.nextInt()的意思就是 获取键盘的输入:如果执行到了这一行,那么程序会暂停,等待你在控制台输入,然后把输入的整数值赋给整形变量
9、java中String.split()用法
在java.lang包中有String.split()方法,返回是一个数组。
split()方法分别有以下两种重载方式:
split(String regex);
split(String regex,int limit);
参数regex :即 regular expression (正则表达式)。这个参数并不是一个简单的分割用的字符,而是一个正则表达式,它对一些特殊的字符可能会出现你预想不到的结果。如果该参数为"",返回值为包含整个字符串的单一元素数组。
参数limit:该值用来限制返回数组中的元素个数(也就是最多分割成几个数组元素,只有为正数时有影响)
当 “.”和“|”作为分隔符时,前面必须得加"\";
用“*”或“+”作为分隔符参数,split()方法运行将抛出,也需要在前面加上“\”进行转义。
String n = “i am hong”;
String[] arr = n.split(" ");