- 作者:20岁爱吃必胜客(坤制作人),近十年开发经验, 跨域学习者,目前于海外某世界知名高校就读计算机相关专业。
- 荣誉:
阿里云博客专家认证
、腾讯开发者社区优质创作者,在CTF省赛校赛多次取得好成绩。跨领域学习
,喜欢摄影、弹吉他、咏春拳。文章深入浅出、语言风趣
;爱吃必胜客社区创立者,旨在“发现美 欣赏美
⭐️题目
给你一个下标从 0 开始的整数数组 nums ,返回 nums 中满足 i mod 10 == nums[i] 的最小下标 i ;如果不存在这样的下标,返回 -1 。 x mod y 表示 x 除以 y 的 余数 。 示例 1: 输入:nums = [0,1,2] 输出:0 解释: i=0: 0 mod 10 = 0 == nums[0]. i=1: 1 mod 10 = 1 == nums[1]. i=2: 2 mod 10 = 2 == nums[2]. 所有下标都满足 i mod 10 == nums[i] ,所以返回最小下标 0 示例 2: 输入:nums = [4,3,2,1] 输出:2 解释: i=0: 0 mod 10 = 0 != nums[0]. i=1: 1 mod 10 = 1 != nums[1]. i=2: 2 mod 10 = 2 == nums[2]. i=3: 3 mod 10 = 3 != nums[3]. 2 唯一一个满足 i mod 10 == nums[i] 的下标 示例 3: 输入:nums = [1,2,3,4,5,6,7,8,9,0] 输出:-1 解释:不存在满足 i mod 10 == nums[i] 的下标 示例 4: 输入:nums = [2,1,3,5,2] 输出:1 解释:1 是唯一一个满足 i mod 10 == nums[i] 的下标 提示: 1 <= nums.length <= 100 0 <= nums[i] <= 9 通过次数11,783提交次数15,567
🌟题目分析
简单的题目暴露不简单的思考。 我们要细细品味其中的味道,一题多解。 体会python语言的灵活与各种用法~ 灵活穿插,自如享受~
🌟 第一式—常用让for循环暴露序号
class Solution: def smallestEqual(self, nums: List[int]) -> int: for i in range(len(nums)): if i%10==nums[i%10]: return i return -1
也可以把 %写成mod
🌟 第二式—把list变成带序号的enumerate()类型
效率可能降低
class enumerate(Iterator[Tuple[int, _T]], Generic[_T]):
class Solution: def smallestEqual(self, nums: List[int]) -> int: for i,v in enumerate(nums): if i%10==nums[i]: return i return -1
enumerate不仅可以遍历序号,也可以遍历值
🌟第三式—先找到所有答案,再返回最小的
比较慢
先用列表推导式,再找最小的
class Solution: def smallestEqual(self, nums: List[int]) -> int: return min([i for i in range(len(nums)) if i%10==nums[i]],default=-1)
print(min((),default=8))# 3、传入可迭代对象为空时,必须指定参数default,用来返回默认值
x mod y denotes the remainder when x is divided by y.
denote
美: [dɪˈnoʊt]
英: [dɪˈnəʊt]
v. 表示;意味着;【逻】概述
网络 指示;表明;代表涵义
第四式—元组的推导式 用next
列表和迭代器区别 列表不论遍历多少次,表头位置始终是第一个元素; 迭代器遍历结束后,不再指向原来的表头位置,而是为最后元素的下一个位置; 通过 type 关键字可以看到列表和迭代器的类型是不同的。 In [1]: a = [1,2,3] In [2]: b = iter(a) In [3]: type(a) Out[3]: list In [4]: type(b) Out[4]: list_iterator
元组推导式
(表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] )
class Solution: def smallestEqual(self, nums: List[int]) -> int: return next((i for i in range(len(nums)) if i%10==nums[i]),-1)
第五式-enumerate+生成式
class Solution: def smallestEqual(self, nums: List[int]) -> int: return next((i for i,num in enumerate(nums) if i%10==num),-1 )