@@ -64,7 +64,7 @@ sys.setrecursionlimit(100000) # 设置函数栈深度足够大,避免栈溢出
64
64
# python int 值范围
65
65
66
66
```
67
- # 乘方 (比较推荐,py2/3 都兼容不容易出错)
67
+ # 乘方 (比较推荐⭐️ ,py2/3 都兼容不容易出错)
68
68
MAXINT = 2**63-1
69
69
MININT = -2**63
70
70
@@ -81,6 +81,23 @@ MAXINT = (1<<63) - 1
81
81
MININT = ~MAXINT
82
82
```
83
83
84
+ # python 负数位运算的坑
85
+ 1 . Python3 中的整型是补码形式存储的
86
+ 2 . Python3 中 bin 一个负数(十进制表示),输出的是它的原码的二进制表示加上个负号
87
+ 3 . 为了获得负数(十进制表示)的补码,需要手动将其和十六进制数 0xffffffff 进行按位与操作,得到结果是个十六进制数,再交给 bin() 进行输出,
88
+ 得到的才是你想要的补码表示。
89
+
90
+ ``` py
91
+ # 整数转换 https://leetcode-cn.com/problems/convert-integer-lcci/
92
+ class Solution :
93
+ def convertInteger (self , A : int , B : int ) -> int :
94
+ return bin ((A & 0x ffffffff ) ^ (B & 0x ffffffff )).count(' 1' )
95
+ ```
96
+
97
+ 参考:
98
+ - https://www.runoob.com/w3cnote/python-negative-storage.html
99
+ - https://leetcode-cn.com/problems/convert-integer-lcci/solution/python3-zhu-yi-qi-dui-yu-fu-shu-de-cun-chu-fang-sh/
100
+
84
101
# python list/dict 排序等技巧
85
102
86
103
``` py
@@ -452,7 +469,7 @@ def gen_tree(vals):
452
469
return root
453
470
```
454
471
455
- # python 交换列表元素的坑
472
+ # python 交换列表元素的坑(交换副作用)
456
473
457
474
```
458
475
# 41. 缺失的第一个正数 https://leetcode-cn.com/problems/first-missing-positive/
@@ -474,7 +491,7 @@ class Solution(object):
474
491
while 1 <= nums[i] <= n and nums[nums[i]-1] != nums[i]:
475
492
# NOTE: 注意这一句交换右边有副作用的,不能颠倒!!!
476
493
# nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i] # 这么写死循环!
477
- nums[nums[i]-1], nums[i] = nums[i], nums[nums[i]-1]
494
+ nums[nums[i]-1], nums[i] = nums[i], nums[nums[i]-1] # 有副作用的放前边
478
495
for i in range(n):
479
496
if nums[i] != i+1:
480
497
return i+1
0 commit comments