1. leetcode每日一题
哈哈小激动,今天终于是自己做出来了
避免暴力搜索,根据数字规律去做。
显然,要想得到最小的加和,越大的数字要放在拆分后尽量小的数位上。
表现为,将数字从大到小排列,相邻两位作为同一位的加和。
class Solution:
def splitNum(self, num: int) -> int:
numList = []
rslt = 0
# 倒序将数字拆开加入列表
while num != 0:
numc = num % 10
num = num // 10
numList.append(numc)
numLen = len(numList)
# 如果是奇数位数,就补一个0
if numLen % 2 == 1:
numList.append(0)
numLen += 1
# 按从大到小排序
numList.sort(reverse = True)
# 逐位做加法
for i in range(0,numLen//2):
rslt = rslt + (numList[2*i] + numList[2*i+1])*(10**i)
return rslt