题目:1486. 数组异或操作
给你两个整数,n 和 start 。
数组 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 ,以及 a、b 、c 三个整数。请你统计其中好三元组的数量。
如果三元组 (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 取余数!
只有两个特殊情况:
- 如果 num = 0 → 根是 0
- 如果 num 是 9 的倍数(且不为 0)→ 根是 9
python中整除是 '//' 而不是 '/'.