重刷leetcode的一些问题记载

    xiaoxiao2021-03-25  121

    1. Line 53: java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0

    string.split("\\+") ,split + 或 * 等符号时需在前面用\\

    contains 不需要这样。

    2. 3sum我的思路是把用arraylist把每个unique的数字put into a list。具体的看code。

    3. 两个reverse list 相加 不要忘了 5+5 = 10的carry。

    4. basic calc2 记得先split +,- instead of * /,一定先split +。// FORGET ABOUT IT

    basic calc2用stack。然后记得char的数字->int时一定要减去'0' (0的ascii value)。

    5. arr = new arr[size]; arrlist.toArray(arr);  // wrong

     

    List<String> javaList = Arrays.asList(arr);        //此方法返回的List不能add,remove对象,因为该方法的实现是使用参数引用的数组的大小来new的一个ArrayList,对返回列表的更改会“直写”到数组,而数组没有add,remove方法。

    6.

    Collections.sort(listB,new Comparator<B>(){              @Override              public int compare(B b1, B b2) {                  return b1.getOrder().compareTo(b2.getOrder());              }                        })

    7. bitjava中有三种移位运算符

    <<      :     左移运算符,num << 1,相当于num乘以2

    >>      :     右移运算符,num >> 1,相当于num除以2

    >>>    :     无符号右移,忽略符号位,空位都以0补齐

    i = i >>>1; <=> i >>>=1;

    value >>> num     --   num 指定要移位值value 移动的位数。

    无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位  无符号右移运算符>>> 只是对32位和64位的值有意义

    >>> 

    逻辑右移,这个才是和<<对应的 

    ~ 按位非(NOT) 

    & 按位与(AND) 

    | 按位或(OR) 

    ^ 按位异或(XOR) 

    >> 右移 

    >>> 无符号右移 

    <<左移 

    前面几个都非常简单,主要是移位操作比较容易出错. 

    首先要搞清楚参与运算的数的位数,如int的是32位。long的是64位。 

    如int i = 1; 

    i的二进制原码表示为: 

    00000000000000000000000000000001 

    long l = 1; 

    l的二进制原码表示为: 

    0000000000000000000000000000000000000000000000000000000000000001 

    正数没有反码、补码,也可以说正数的反码、补码跟原码一样。 

    负数的反码为原码逐位取反, 

    如int i = -1; 

    10000000000000000000000000000001,最高位是符号位。正数为0,负数为1。 

    逐位取反后: 

    01111111111111111111111111111110即反码。 

    反码加1: 

    01111111111111111111111111111111即补码。 

    负数都是用补码参与运算的。得到的也是补码,需要减1取反获得原码。

    8.

    1. Line 53: java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0

    string.split("\\+") ,split + 或 * 等符号时需在前面用\\

    contains 不需要这样。

    2. 3sum我的思路是把用arraylist把每个unique的数字put into a list。具体的看code。

    3. 两个reverse list 相加 不要忘了 5+5 = 10的carry。

    4. basic calc2 记得先split +,- instead of * /,一定先split +。// FORGET ABOUT IT

    basic calc2用stack。然后记得char的数字->int时一定要减去'0' (0的ascii value)。

    5. arr = new arr[size]; arrlist.toArray(arr);  // wrong

     

    List<String> javaList = Arrays.asList(arr);        //此方法返回的List不能add,remove对象,因为该方法的实现是使用参数引用的数组的大小来new的一个ArrayList,对返回列表的更改会“直写”到数组,而数组没有add,remove方法。

    6.

    Collections.sort(listB,new Comparator<B>(){              @Override              public int compare(B b1, B b2) {                  return b1.getOrder().compareTo(b2.getOrder());              }                        })

    7. bitjava中有三种移位运算符

    <<      :     左移运算符,num << 1,相当于num乘以2

    >>      :     右移运算符,num >> 1,相当于num除以2

    >>>    :     无符号右移,忽略符号位,空位都以0补齐

    i = i >>>1; <=> i >>>=1;

    value >>> num     --   num 指定要移位值value 移动的位数。

    无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位  无符号右移运算符>>> 只是对32位和64位的值有意义

    >>> 

    逻辑右移,这个才是和<<对应的 

    ~ 按位非(NOT) 

    & 按位与(AND) 

    | 按位或(OR) 

    ^ 按位异或(XOR) 

    >> 右移 

    >>> 无符号右移 

    <<左移 

    前面几个都非常简单,主要是移位操作比较容易出错. 

    首先要搞清楚参与运算的数的位数,如int的是32位。long的是64位。 

    如int i = 1; 

    i的二进制原码表示为: 

    00000000000000000000000000000001 

    long l = 1; 

    l的二进制原码表示为: 

    0000000000000000000000000000000000000000000000000000000000000001 

    正数没有反码、补码,也可以说正数的反码、补码跟原码一样。 

    负数的反码为原码逐位取反, 

    如int i = -1; 

    10000000000000000000000000000001,最高位是符号位。正数为0,负数为1。 

    逐位取反后: 

    01111111111111111111111111111110即反码。 

    反码加1: 

    01111111111111111111111111111111即补码。 

    负数都是用补码参与运算的。得到的也是补码,需要减1取反获得原码。

    8.

    转载请注明原文地址: https://ju.6miu.com/read-24150.html

    最新回复(0)