LeetCode:1491561258
Posted 南岸青栀*
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode:1491561258相关的知识,希望对你有一定的参考价值。
文章目录
1491. 去掉最低工资和最高工资后的工资平均值
法1:
class Solution:
def average(self, salary: List[int]) -> float:
salary.sort()
salary.pop()
res = sum(salary[1::])/(len(salary)-1)
return res
法2:一行python
class Solution:
def average(self, salary: List[int]) -> float:
return (sum(salary)-max(salary)-min(salary)) / (len(salary)-2)
561. 数组拆分 I
法1:排序法
既然寻找两数之间最小值的最大之和。
当然是排序之后两个数的前面一个数
class Solution:
def arrayPairSum(self, nums: List[int]) -> int:
nums.sort()
return sum(nums[i*2] for i in range(len(nums)//2))
思路相同,不同写法
class Solution:
def arrayPairSum(self, nums: List[int]) -> int:
# #不同写法
nums.sort()
return sum(nums[::2])
日常python一行
class Solution:
def arrayPairSum(self, nums: List[int]) -> int:
#另一种写法
return sum(sorted(nums)[::2])
258. 各位相加
法1:递归,运行结果还不错
class Solution:
def addDigits(self, num: int) -> int:
s = 0
n = str(num)
for i in n:
s += int(i)
if len(str(s)) > 1:
return self.addDigits(s)
else:
return s
既然能递归一定能迭代
法2:迭代
class Solution:
def addDigits(self, num: int) -> int:
#法2迭代
n = str(num)
while True:
s = 0
for i in n:
s += int(i)
if len(str(s)) <= 1:
return s
else:
n = str(s)
进阶
O(1) 数学推理:设某个数字的字符串表示为’abc’,则这个数字代表a*100 + b*10 + c
,转换后成为a + b + c
,可见每次转换相当于把原数字减去a*99 + b*9 = 9 * (a*11 + b)
,可以推出只要高于个位的位置上有数字,算法就会减去一个小于原数字的9的倍数,这就相当于数字 % 9
。但9 % 9 = 0
,而 9 本身就没有十位,因此需要考虑原数字是 0 或 9 的倍数的特殊情况
首先计算num % 9,若结果为 0 则考虑num本身是否为 0,若不为 0 返回 9
class Solution:
def addDigits(self, num: int) -> int:
#进阶
return num % 9 or 9 * bool(num)
补充:
以上是关于LeetCode:1491561258的主要内容,如果未能解决你的问题,请参考以下文章