1.python中for _ in range(10) 与 for i in range(10):
for _ in range(n) 一般仅仅用于循环n次,不用设置变量,用 _ 指代临时变量,只在这个语句中使用一次。
在循环中两者的作用相似。
2.Python 三元表达式写法 A if x else B ,代表当 x = Truex=True 时执行 A ,否则执行 B。

# 如下代码:表示l1为真,执行cur.next = l1,否则执行cur.next = l2
cur.next = l1 if l1 else l2

3.return not的妙用:

在剑指offer31题中:最后返回语法为:

return not stack # 这里stack为空, not stack意思是返回一个bool类型true

在这里插入图片描述
4.python中的pop()函数和popleft()函数

首先对于pop而言,它是用于stack中的,可以带参数

而对于pooleft是用于collections中,不可以带参数

5.from functools import partial
简单而言,partial 函数的功能就是:把一个函数的某些参数给固定住,返回一个新的函数。需要注意的是,我们上面是固定了 multiply 的关键字参数 y=2,如果直接使用:

     downsample = partial(downsample_basic_block,
                      planes=planes * block.expansion,
                          stride=stride)

6.剑指offer50题

在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。

代码如下:

# 1.哈希表
class Solution:
    def firstUniqChar(self, s: str) -> str:
        dic = {}
        for c in s:
            dic[c] = not c in dic
        for c in s:
            if dic[c]: return c
        return ' '

# 2.有序哈希表
class Solution:
    def firstUniqChar(self, s: str) -> str:
        dic = collections.OrderedDict()
        for c in s:
            dic[c] = not c in dic
        for k, v in dic.items():
            if v: return k
        return ' '

在上述代码中,dic[c] = not c in dic中的 not c in dic整体为一个布尔值

7.leetcode27题

用python 方法返回改变后的数组,只需返回数组长度就能显示数组

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        for _ in range(nums.count(val)):
            nums.remove(val)
        return len(nums)

作者:silence_yu
链接:https://leetcode-cn.com/problems/remove-element/solution/3xing-gao-ding-zui-jian-pythonjie-fa-yon-im9k/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

同样leetcode26题最后也是返回数组长度,最后显示结果是整个新的数组???
代码如下:

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        if not nums:
            return 0
        
        n = len(nums)
        fast = slow = 1
        while fast < n:
            if nums[fast] != nums[fast - 1]:
                nums[slow] = nums[fast]
                slow += 1
            fast += 1
        
        return slow

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/solution/shan-chu-pai-xu-shu-zu-zhong-de-zhong-fu-tudo/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

8.leetcode28题-字符串匹配问题

KMP算法

详解链接

9.实现没有除号的除法

leetcode29题

换成距离更好理解,大佬代码地址

C++代码:

class Solution {
public:
    int divide(int dividend, int divisor) {
        if (dividend == INT_MIN && divisor == -1) return INT_MAX; // 特殊情况,单独处理
        long terminus = labs(dividend), stride = labs(divisor), res = 0; // 屏蔽符号带来的干扰
        while (stride <= terminus) {
            long span = stride, sub = 1; // 计算要走的步数
            while (terminus >= span << 1) // 步数按 *2 增长
                span <<= 1, sub <<= 1; // 记录步数增长的倍数
            terminus -= span, res += sub; // 砍掉一半的距离,并记录步数的增长
        }
        return (dividend < 0) ^ (divisor < 0) ? -res : res; // 返回带符号的值
    }
};

作者:fengziluo
链接:https://leetcode-cn.com/problems/divide-two-integers/solution/huan-cheng-ju-chi-ke-neng-geng-hao-li-ji-olb9/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

感觉python代码更好理解

# 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 
# 
#  返回被除数 dividend 除以除数 divisor 得到的商。 
# 
#  整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2 
# 
#  
# 
#  示例 1: 
# 
#  输入: dividend = 10, divisor = 3
# 输出: 3
# 解释: 10/3 = truncate(3.33333..) = truncate(3) = 3 
# 
#  示例 2: 
# 
#  输入: dividend = 7, divisor = -3
# 输出: -2
# 解释: 7/-3 = truncate(-2.33333..) = -2 
# 
#  
# 
#  提示: 
# 
#  
#  被除数和除数均为 32 位有符号整数。 
#  除数不为 0。 
#  假设我们的环境只能存储 32 位有符号整数,其数值范围是 [231, 2311]。本题中,如果除法结果溢出,则返回 2311。 
#  
#  Related Topics 位运算 数学 
#  👍 629 👎 0


# leetcode submit region begin(Prohibit modification and deletion)
class Solution(object):
    def divide(self, dividend, divisor):
        """
        :type dividend: int
        :type divisor: int
        :rtype: int
        """
        # 将被除数和除数转化为整数
        sign = 1
        if divisor * dividend < 0:
            sign = -1
            divisor = abs(divisor)
            dividend = abs(dividend)

        elif divisor < 0 and dividend < 0: # 如果被除数和除数都是负值,结果不修改符号
            divisor = abs(divisor)
            dividend = abs(dividend)

        remain = dividend # 余数
        result = 0 # 商
        while remain >= divisor:
            cur = 1 # 倍增商
            div = divisor # 倍增值
            while div + div < remain:
                cur += cur
                div += div
            remain -= div # 余数递减
            result += cur # 商值累计
        if sign == -1:
            result = -result
        if result >= 2**31: # 按照题目要求,溢出处理
            result = 2**31 -1
        return result

10.一定要掌握的位操作运算

链接地址

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐