博主头像
HailinCode

Full-Stack Developer

算法

NO.1009 十进制整数的反码

先把 n 转成二进制字符串,去掉开头的 0b。然后遍历每一位,如果是 0 就变成 1,是 1 就变成 0,得到一个新的二进制字符串。最后把这个新字符串转回十进制整数返回。 时间复杂度 O(k),k 是 n 的二进制位数,也就是 log₂(n) 级别。 总评:思路很直接,按题目描述一步步来。但实现上有点绕,用了字符串操作和 int 转换,效率还行但不够简洁。其实可以用位运算直接做:找到和 n 相同位数的全 1 掩码,异或一下就得到按位取反的结果,不需要转字符串。

算法

NO.54 螺旋矩阵

力扣 No.54 螺旋数组 方向数组控制遍历,di = [(0,1), (1,0), (0,-1), (-1,0)] 分别代表右、下、左、上。idx 记录当前方向,cur_di 是当前正在走的方向。 每走一步先把当前格子加入结果,标记已访问。然后检查下一步能不能走——如果在边界内且没走过,就继续往前走;如果走不了(越界或已访问),就换个方向。换方向时 idx +1 取模,拿到新方向,然后用新方向走一步。 这个过程一直重复,直到结果数组长度等于总格子数。 时间复杂度 O(m×n),每个格子只走一次。 总评:用方向数组 + 访问标记的思路很直观,代码写得很清晰。换方向时直接用新方向走一步,避免了旧方向的干扰,这个细节处理得不错。空间上用了 vis 数组,虽然多占点内存,但逻辑简单,适合用来理解螺旋遍历的过程。