LeetCode刷题笔记(1)常用知识点
1.Integer.parseInt(String s, int radix)方法的作用是:将radix进制的字符串s转化成10进制的int型数字并返回。
Integer.valueof(String s, int radix)方法调用了上述方法,可以实现同样的效果。
2.String[] aStr = A.split(" ");方法将字符串类型的A按照指定的分隔符转换成字符串串数组aStr
3.String[] result = new String[list.size()]; list.toArray(result);将list转换成String类型的数组result
4.List<String> aList = Arrays.asList(aStr);将字符串数组类型的aStr转换成List类型的aList
5.Collections.sort(aList);可以按照默认的顺序对集合aList中的元素进行排序。Arrays.sort(int[] g);可以对数组g进行排序。
6.StringBuffer中的new StringBuffer(word).reverse().toString()方法可以将字符串word传入其中构造一个sb对象并且反转原来的word字符串
7.String的trim()方法是去掉字符串开头和结尾的空格,中间的空格不管。
8.String[] testl = test.split(" |\\.");可以使用‘|’来使用多个分隔符空格和点进行字符串分割,有的需要转义,使用‘\\’,例如这里的点就需要转义。
9.HashMap中的put方法,如果put多次相同的键会覆盖,另外for (String key : count.keySet())可以遍历HashMap集合。
10.使用队列功能时,要使用LinkedList<Integer> list = new LinkedList<>();来声明生成的是一个链队列。list.get(0)获得最后add进去的元素。和getLast()同样效果。
也可以使用Stack<Integer> stack = new Stack();来使用堆栈。
11.Arrays.sort(candies)可以对数组进行排序。
12.string转换成int :Integer.valueOf("12") (返回Integer对象) 或Integer.PaseInt("12")(返回int)
int转换成string : String.valueOf(12)
char转换成string:String str=String.valueOf('2')
13.在进行HashSet初始化的时候,如果觉得一个一个add代码太长,可以通过一个数组然后再循环添加
Set<Character> vowel = new HashSet(); for (char c: new char[]{'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'}) vowel.add(c);
14.word.substring(1)表示:从下标为1的位置开始到最后
15.需要记住的ASCII码表:0(48),9(57),A(65),Z(90),a(97),z(122)
16.Integer.parseInt无法将一个负数的补码转换成原始的负数,否则会报错java.lang.NumberFormatException
System.out.println(Integer.toBinaryString(-20));
System.out.println(Integer.parseInt("11111111111111111111111111101100", 2));
17.Character.isLetter(c)判断是不是字母,Character.toLowerCase(c)将大小写都统一成小写
18.return !s.matches(".*LLL.*|.*A.*A.*");正则表达式,如果A出现两次即以上或者L连续出现三次,返回false,否则,返回true
19. if (set.contains(dividend)) return false; else set.add(dividend);对于有可能循环出现的数来说,最好的方法就是使用集合,如果存在就返回,不存在就添加。
20.两个字符型的整数直接相加得到的是二进制的相加的结果。例如‘2’+‘2’得到的结果是ASCII码相加,例如50+50=100
21.在有时间要求的题目中,使用递归比使用迭代所需要的时间长很多,所以大部分情况可以考虑使用迭代。
22.String vowels = "aeiouAEIOU";可以用String的contains方法而就可以不用集合set了。
vowels.contains(chars[start]+"")
23.杨辉三角,空间复杂度O(k),k表示第几行(从0开始),主要使用List集合的set(int index, E element);可以在index位置设置元素值element
public List<Integer> getRow(int rowIndex) { List<Integer> pascal = new ArrayList<>(); for (int i = 0; i <= rowIndex; i++) { pascal.add(0, 1); for (int j = 1; j < pascal.size()-1; j++) { pascal.set(j, pascal.get(j) + pascal.get(j+1)); } } return pascal; }
24.(Same 9 years education, why are you so outstanding.)在做要用到栈的题的时候,不妨转变思维,例如括号匹配"{{)}"这种题,可以来一波反向思维。
public boolean isValid(String s) { Stack<Character> stack = new Stack<Character>(); for (char c : s.toCharArray()) { if (c == '(') stack.push(')'); else if (c == '{') stack.push('}'); else if (c == '[') stack.push(']'); else if (stack.isEmpty() || stack.pop() != c) return false; } return stack.isEmpty(); }
25.linux 查看txt的第10行
awk 'NR==10' data.txt sed -n '10p' data.txt nl data.txt | sed -n '10p' head -10 data.txt | tail -1
26.求一个整数的所有因数的问题:可以按照这样的思想:
public boolean checkPerfectNumber(int num) { if (num <= 0) return false; int sum = 0; for (int i = 1; i * i <= num; i++) { if (num%i == 0) { sum += i; if (i * i != num) sum += num/i; } } return sum - num == num; }
27.HashMap扩容条件:同时满足初始容量大于哈希因子并且要插入的数据发生碰撞才扩容,否则,可以存在填满所有容量的情况。
例如:初始容量16,装填因子0.75,在装填12个后,如果第13个发生了碰撞,那么就要扩容,如果不碰撞,就可以装进去。
28.使用grep、awk和sed来查看txt中号码格式为(xxx) xxx-xxxx or xxx-xxx-xxxx的号码
grep -P '^(\d{3}-|\(\d{3}\) )\d{3}-\d{4}$' file.txt
sed -n -r '/^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$/p' file.txt
awk '/^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$/' file.txt
或者
grep -e '\(^[0-9]\{3\}-[0-9]\{3\}-[0-9]\{4\}$\)' -e '\(^([0-9]\{3\})[ ]\{1\}[0-9]\{3\}-\([0-9]\{4\}\)$\)' file.txt
29.在使用二分法解决问题时,使用int mid = left + (right - left)/2;来代替int mid = (right+left)/2,可以很好地解决OverFlow问题。(Easy 278)
30.对于String A, String B,A.indexOf(B) >= 0的作用就是判断A中包不包含子字符串B。A.indexOf(B)的结果就是求A中子串为B的位置,也就是A中B字符串的第一个字符的索引,如果不包含就返回-1.
31.sb.deleteCharAt(i);可以删除i位置上的字符, sb.insert(i, c);可以在i位置上插入字符c
32.result.add(Arrays.asList(new Integer[] {prev, curr}));向List<List<Integer>> result中插入List<Integer>的标准写法。
33.String[] a = c.toArray(new String[0]);可以将集合类型的c转换成确定String类型的String[],就是开辟一块长度为0的String内存用来指示类型。
34.List<Integer> list = Arrays.asList(2,3),可以不用new然后一个一个add,这样便于快速初始化。
35.Arrays.sort(a);可以对数组a进行排序,Arrays.binarySearch(int[] a, int key)可以使用二分查找在a数组中查找到key的索引,如果不存在返回-1.
36.String的trim()方法可以取出字符串首位空格,如果想取出中间的空格,可以使用replace(“ ”,“”)方法。