python.leetcode习题知识点笔记

矩阵篇

Leetcode 2133. 检查是否每一行每一列都包含全部整数
对一个大小为 n x n 的矩阵而言,如果其每一行和每一列都包含从 1 到 n 的 全部 整数(含 1 和 n),则认为该矩阵是一个 有效 矩阵。
给你一个大小为 n x n 的整数矩阵 matrix ,请你判断矩阵是否为一个有效矩阵:如果是,返回 true ;否则,返回 false 。
1.从可迭代对象中生成值都为0,键为可迭代对象的字典

iterable_obj = [1,2,3,4,5]
zero_dict = {key:0 for key in iterable_obj}

2.dict.value()返回的是什么? 返回一个包含字典所有值的视图对象

3.如何将字典的所有值进行重新赋值?

#方法1:循环迭代
for key in my_dict:
	my_dict[key] = 0
	
#方法2:字典推导式  
my_dict = {key:0 for key in my_dict}
  • 字典推导式: {key_expression:value_expression for item in iterable}
    • key_expression和value_expression 可以是元素本身,也可以是包含可迭代对象的表达式用于将元素进行转化
    • item是可迭代对象中的每个元素
    • iterable 是可迭代对象如:列表元组集合字符串等
#例:将列表中的元素作为key,平方作为value创建字典:
numbers = [1,2,3]
squr_dict = {num:num**2 for num in numbers}

4.如何判断是否有任何一个在可迭代对象中是否符合条件? 答:any(iterable)

# 例1: 使用 any 判断列表中是否存在奇数
numbers = [2, 4, 6, 7, 8, 10]
result = any(num % 2 != 0 for num in numbers)
print(result)  # 输出 True,因为列表中存在奇数(7)

# 例2: 使用 any 判断元组中是否存在负数
numbers_tuple = (1, 2, -3, 4, 5)
result_tuple = any(num < 0 for num in numbers_tuple)
print(result_tuple)  # 输出 True,因为元组中存在负数(-3)

  1. 判断矩阵是否是一个 X 矩阵
    如果一个正方形矩阵满足下述 全部 条件,则称之为一个 X 矩阵 :
    1.矩阵对角线上的所有元素都 不是 0
    2.矩阵中所有其他元素都是 0
    给你一个大小为 n x n 的二维整数数组 grid ,表示一个正方形矩阵。如果 grid 是一个 X 矩阵 ,返回 true ;否则,返回 false 。

问1: n阶段次对角线元素下标有什么规律吗?
设n阶矩阵次对角线元素行索引为 i,则次对角线元素下标为 (i, n-i-1)。

注: math.sqr(num)得到的是float小数,如果迭代range(math.sqr(num))应该为整数

  1. 在区间范围内统计奇数数目
    给你两个非负整数 low 和 high 。请你返回 low 和 high 之间(包括二者)奇数的数目。
class Solution:
    def countOdds(self, low: int, high: int) -> int:
        #[0,m]中奇数为m+1//2
        return (high+1)//2 - (low)//2
  1. 去掉最低工资和最高工资后的工资平均值:
    给你一个整数数组 salary ,数组里每个数都是 唯一 的,其中 salary[i] 是第 i 个员工的工资。
    请你返回去掉最低工资和最高工资以后,剩下员工工资的平均值。
    示例 1:
    输入:salary = [4000,3000,1000,2000]
    输出:2500.00000
    解释:最低工资和最高工资分别是 1000 和 4000 。
    去掉最低工资和最高工资以后的平均工资是 (2000+3000)/2= 2500

问1: 想同时对同一列表完成pop(max_idx)和pop(min_idx)而不是由于先pop(max_idx)后列表变化从而导致min_value不再是min_idx,应该这么做?
答:通过列表生成式生成新列表来进行删除

salary = [s for s in salary if s != min_val and s != max_val]

给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0。
示例 1:
输入:nums = [2,1,2]
输出:5
解释:你可以用三个边长组成一个三角形:1 2 2。

问1:前置性访问如何防止越界?
答: 访问边界控制在: 非前置访问边界 - 最大前置数量

class Solution:
    def largestPerimeter(self, nums: List[int]) -> int:
        nums.sort(reverse=True)
        for i in range(len(nums)-2):# -2的目的是为了防止越界
            if nums[i] < nums[i+1] + nums[i+2]:
                return nums[i] + nums[i+1] + nums[i+2]
        return 0

  1. 二进制求和
    给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
  • 问1:如何将十进制数值字符转换为二进制数值?
    答:bin(int(str)), 注意:先转换成十进制表示的数值,在将十进制数值进行运算得到相应的二进制不是直接的二进制!

  • 问2:如何将二进制字符串直接转换为十进制数值?
    答:使用int() 函数, 提供第二个参数作为基数(radix),将基数设置为 2,例如:

binary_str = "1101"
decimal_num = int(binary_str, 2)

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值