leetcode学python记录2

题目:1486. 数组异或操作

给你两个整数,nstart

数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length

请返回 nums 中所有元素按位异或(XOR)后得到的结果。

示例 1:

复制代码
输入:n = 5, start = 0
输出:8
解释:数组 nums 为 [0, 2, 4, 6, 8],其中 (0 ^ 2 ^ 4 ^ 6 ^ 8) = 8 。
     "^" 为按位异或 XOR 运算符。
python 复制代码
class Solution:
    def xorOperation(self, n: int, start: int) -> int:
        result = 0
        for i in range(n):
            nums = start + 2 * i
            result = result ^ nums
        return result

for循环:

for i in range(n): 是指下标i从0开始,遍历到n-1,每次步长为1,不用反复定义i,在for中写上即可,也可以写成for i in range(0,n,1):

for i in nums: 是指直接一个一个拿出数组中的每一个数,python没有数组只有列表。

异或操作:二进制运算,相同为0,不同为1,意为一样的就是假的,不同为真,符号'^'

运算 符号 规则(口诀)
& 全 1 才 1,有 0 就是 0
| 有 1 就 1,全 0 才 0
~ 0 变 1,1 变 0
异或 ^ 相同 0,不同 1

题目:1512. 好数对的数目

给你一个整数数组 nums

如果一组数字 (i,j) 满足 nums[i] == nums[j]i < j ,就可以认为这是一组 好数对

返回好数对的数目。

示例 1:

复制代码
输入:nums = [1,2,3,1,1,3]
输出:4
解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始
python 复制代码
class Solution:
    def numIdenticalPairs(self, nums: List[int]) -> int:
        good = 0
        n = len(nums)
        for i in range(n):
            for j in range(i + 1,n):
                if nums[i] == nums[j]:
                    good += 1
        return good

注:python计算数组的长度是:len(nums)

题目:1534. 统计好三元组

给你一个整数数组 arr ,以及 abc 三个整数。请你统计其中好三元组的数量。

如果三元组 (arr[i], arr[j], arr[k]) 满足下列全部条件,则认为它是一个 好三元组

  • 0 <= i < j < k < arr.length
  • |arr[i] - arr[j]| <= a
  • |arr[j] - arr[k]| <= b
  • |arr[i] - arr[k]| <= c

其中 |x| 表示 x 的绝对值。

返回 好三元组的数量

示例 1:

复制代码
输入:arr = [3,0,1,1,9,7], a = 7, b = 2, c = 3
输出:4
解释:一共有 4 个好三元组:[(3,0,1), (3,0,1), (3,1,1), (0,1,1)] 。
python 复制代码
class Solution:
    def countGoodTriplets(self, arr: List[int], a: int, b: int, c: int) -> int:
        good = 0
        n = len(arr)
        for i in range(n):
            for j in range(i + 1,n):
                if abs(arr[i] - arr[j]) > a: continue
                for k in range(j + 1,n):
                    if abs(arr[j] - arr[k]) <= b and abs(arr[i] - arr[k]) <= c:
                        good += 1 
        return good

注:python中if语句的和不是 '&&' 而是 'and' 。

题目:709. 转换成小写字母

给你一个字符串 s ,将该字符串中的大写字母转换成相同的小写字母,返回新的字符串。

示例 1:

复制代码
输入:s = "Hello"
输出:"hello"
python 复制代码
class Solution:
    def toLowerCase(self, s: str) -> str:
        return s.lower()

注:python中可直接调用函数一键大小写而不用手搓大小写

s.lower()s字符串中全转小写,s.upper()全转大写。

另附ASCII表中 a-z 字符数据:

'A' - 'Z'=65 - 90; 'a' - 'z' = 97 - 122 。大小写差为32.

题目:258. 各位相加

给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。

示例 1:

复制代码
输入: num = 38
输出: 2 
解释: 各位相加的过程为:
38 --> 3 + 8 --> 11
11 --> 1 + 1 --> 2
由于 2 是一位数,所以返回 2。
python 复制代码
#c语言枚举解法:
int addDigits(int num) {
    if(num >= 0 && num <10)
    {
        return num;
    }
    else
    {
        while(num >= 10)
        {
            num = num / 10 + num % 10;
        }
        return num;
    }
}


#python枚举解法:
class Solution:
    def addDigits(self, num: int) -> int:
        if num >= 0 and num < 10:
            return num
        while num >= 10:
            num = num // 10 + num % 10
        return num

#数字根解法:
class Solution:
    def addDigits(self, num: int) -> int:
        if num == 0:
            return 0
        if num % 9 == 0:
            return 9
        return num % 9

#一行搞定
class Solution:
    def addDigits(self, num: int) -> int:
        return (num - 1) % 9 + 1 if num else 0

这题其实就是考察 数字根:反复把各位相加,直到变为一位数。

从数学上来看数字根其实就是

数字根 = num 对 9 取余数!

只有两个特殊情况:

  1. 如果 num = 0 → 根是 0
  2. 如果 num 是 9 的倍数(且不为 0)→ 根是 9

python中整除是 '//' 而不是 '/'.

相关推荐
毕胜客源码2 小时前
改进yolov8的香蕉成熟度检测系统,改进前后的模型指标对比,有技术文档,支持图像、视频和摄像实时检测
人工智能·python·深度学习·yolo·django
查古穆2 小时前
二分查找-搜索二维矩阵
算法
会编程的土豆2 小时前
【数据结构与算法】堆排序
开发语言·数据结构·c++·算法·leetcode
会编程的土豆2 小时前
【数据结构与算法】希尔排序
数据结构·c++·算法·排序算法
NeilNiu2 小时前
lm-Evaluation Harness使用
python
梦幻精灵_cq2 小时前
我的color()设计理念——终端颜色渲染状态机设定
python
南 阳2 小时前
Python从入门到精通day62
开发语言·python
邦爷的AI架构笔记2 小时前
GLM-5.1 接入踩坑记录:用免费开源模型搭个 AI 代码审计小工具
后端·算法
苏宸啊2 小时前
哈希扩展问题
算法·哈希算法