3. Math

Matrix

小陷阱:初始化矩阵不能写成:

before = [[0]*cols]*rows

而必须是:

before = [[0]*cols for i in range(rows)]
or
before = [[0 for _ in range(cols)] for i in range(rows)]

A common method to rotate the image

48. Rotate Image

/*
 * clockwise rotate
 * first reverse up to down, then swap the symmetry 
 * 1 2 3     7 8 9     7 4 1
 * 4 5 6  => 4 5 6  => 8 5 2
 * 7 8 9     1 2 3     9 6 3
*/
class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        matrix.reverse()
        for i in range(len(matrix)):
            for j in range(i):
                matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]

#first swap the symmatry, second reverse left and right
class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        for i in range(len(matrix)):
            for j in range(i):
                matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
        for row in matrix:
            for j in range(len(row)//2):
                row[j], row[~j] = row[~j], row[j]
                '''
                ~ and -:
                a = [1, 2, 3, 4]
                a[~0] = 4 // a[-1] = 4
                '''
                
            


/*
 * anticlockwise rotate
 * first reverse left to right, then swap the symmetry
 * 1 2 3     3 2 1     3 6 9
 * 4 5 6  => 6 5 4  => 2 5 8
 * 7 8 9     9 8 7     1 4 7
*/
void anti_rotate(vector<vector<int> > &matrix) {
    for (auto vi : matrix) reverse(vi.begin(), vi.end());
    for (int i = 0; i < matrix.size(); ++i) {
        for (int j = i + 1; j < matrix[i].size(); ++j)
            swap(matrix[i][j], matrix[j][i]);
    }
}

1200. Minimum Absolute Difference

Count Numbers with Unique Digits

leetcodearrow-up-right

Backtracking solution

DP solution

Bits位运算

1、 判断整型的奇偶性

使用位运算操作如下

这个例子相信大家都见过,只需判断整型的第一位是否是 1 即可,如果是说明是奇数,否则是偶数

2、 判断第 n 位是否设置为 1

在上例中我们判断第一位是否为 1,所以如果要判断第 n 位是否 1,只要把 1 左移 n 位再作与运算不就完了。

3、 将第 n 位设置为 1

思路同第二步,先把 1 移到第 n 位再作或运算,这样第 n 位就肯定为 1。

4、 将第 n 位设置为 0

先将 1 左移到 第 n 位,再对其取反,此时第 n 位为 0,其他位都为 1,这样与 x 作与运算后,x 的第 n 位肯定为 0。

5. 将第 n 位的值取反

我们知道异或操作是两个数的每一位相同,结果为 0,否则是 1,所以现在把 1 左移到第 n 位,则如果 x 的第 n 位为 1,两数相同结果 0,如果 x 的第 n 位为 0,两数不相同,则为 1。来看个简单的例子

如图示,第五位刚好取反

6、 将最右边的 1 设为 0

如果说上面的 5 点技巧有点无聊,那第 6 条技巧确实很有意思,也是在 leetcode 经常出现的考点,下文中大部分习题都会用到这个知识点,务必要谨记!掌握这个很重要,有啥用呢,比如我要统计 1 的位数有几个,只要写个如下循环即可,不断地将 x 最右边的 1 置为 0,最后当值为 0 时统计就结束了。

mean, mod

保留float类型小数点后3位

1 ’%.2f’ %f 方法(推荐)

2 format函数(推荐)

3.round()

round函数自动四舍五入;自动去掉多余的0

power of two

415 Add Strings(模拟加法运算)

Last updated