本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《力扣刷题记录——1108. IP 地址无效化、1281. 整数的各位积和之差 次数 、1295. 统计位数为偶数的数字、1394. 找出数组中的幸运数》。
目录
1108. IP 地址无效化
题目描述
给你一个有效的 IPv4 地址
address
,返回这个 IP 地址的无效化版本。所谓无效化 IP 地址,其实就是用
"[.]"
代替了每个"."
。示例 1:
输入:address = "1.1.1.1" 输出:"1[.]1[.]1[.]1"示例 2:
输入:address = "255.100.50.0" 输出:"255[.]100[.]50[.]0"
解题思路
用字符串的replace就可以替换字母了。
解题代码
def defangIPaddr(address: str) -> str:
return address.replace(".","[.]")
1281. 整数的各位积和之差
题目描述
给你一个整数
n
,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。示例 1:
输入:n = 234 输出:15 解释: 各位数之积 = 2 * 3 * 4 = 24 各位数之和 = 2 + 3 + 4 = 9 结果 = 24 - 9 = 15示例 2:
输入:n = 4421 输出:21 解释: 各位数之积 = 4 * 4 * 2 * 1 = 32 各位数之和 = 4 + 4 + 2 + 1 = 11 结果 = 32 - 11 = 21
解题思路
将整数转化为字符串,通过for循环进行累加和累乘,最终返回结果。
解题代码
def subtractProductAndSum(n: int) -> int:
ji = 1
he = 0
for i in str(n):
ji *= int(i)
he += int(i)
return ji-he
1295. 统计位数为偶数的数字
题目描述
给你一个整数数组
nums
,请你返回其中位数为 偶数 的数字的个数。示例 1:
输入:nums = [12,345,2,6,7896] 输出:2 解释: 12 是 2 位数字(位数为偶数) 345 是 3 位数字(位数为奇数) 2 是 1 位数字(位数为奇数) 6 是 1 位数字 位数为奇数) 7896 是 4 位数字(位数为偶数) 因此只有 12 和 7896 是位数为偶数的数字示例 2:
输入:nums = [555,901,482,1771] 输出:1 解释: 只有 1771 是位数为偶数的数字。
解题思路
用for循环遍历列表找出偶数,用长度%2就可以了。
解题代码
def findNumbers(nums: list[int]) -> int:
count = 0
for i in nums:
if len(str(i))%2 == 0:
count+=1
return count
1394. 找出数组中的幸运数
题目描述
在整数数组中,如果一个整数的出现频次和它的数值大小相等,我们就称这个整数为「幸运数」。
给你一个整数数组
arr
,请你从中找出并返回一个幸运数。
- 如果数组中存在多个幸运数,只需返回 最大 的那个。
- 如果数组中不含幸运数,则返回 -1 。
示例 1:
输入:arr = [2,2,3,4] 输出:2 解释:数组中唯一的幸运数是 2 ,因为数值 2 的出现频次也是 2 。示例 2:
输入:arr = [1,2,2,3,3,3] 输出:3 解释:1、2 以及 3 都是幸运数,只需要返回其中最大的 3 。示例 3:
输入:arr = [2,2,2,3,3] 输出:-1 解释:数组中不存在幸运数。示例 4:
输入:arr = [5] 输出:-1示例 5:
输入:arr = [7,7,7,7,7,7,7] 输出:7
解题思路
用字典将元素和出现的次数构成键值对,如果键和值一样,则添加到列表中,如果列表为空,那么返回-1,如果不为空,返回最大值。
解题代码
def findLucky(arr: list[int]) -> int:
arr_dic = {}
result = []
for i in set(arr):
arr_dic[i] = arr.count(i)
for i in arr_dic.items():
if i[0] == i[1]:
result.append(i[0])
if result == []:
return -1
else:
return max(result)