题目
给你一个整数 num 。重排 num 中的各位数字,使其值 最小化 且不含 任何 前导零。
返回不含前导零且值最小的重排数字。
注意,重排各位数字后,num 的符号不会改变。
示例 1:
输入:num = 310
输出:103
解释:310 中各位数字的可行排列有:013、031、103、130、301、310 。
不含任何前导零且值最小的重排数字是 103 。
示例 2:
输入:num = -7605
输出:-7650
解释:-7605 中各位数字的部分可行排列为:-7650、-6705、-5076、-0567。
不含任何前导零且值最小的重排数字是 -7650 。
提示:
-10^15 <= num <= 10 ^15
来源:力扣(LeetCode)
解题思路
将数字按照不同的情况,拆分然后排序,接着进行重组。需要注意的地方就是最高位的数字不能是0,需要找到接下来不是0的数字进行替换。
class Solution:def smallestNumber(self, num: int) -> int:if num<0:num=-numtemp=[]while num>0:temp.append(num%10)num//=10temp.sort(reverse=True)q=len(temp)-1if temp[0]==0:for i in range(1,q+1):if temp[i]!=0:temp[0]=temp[i]temp[i]=0breaks=0for i in temp:s+=i*10**qq-=1return -selif num==0:return 0else:temp=[]while num>0:temp.append(num%10)num//=10temp.sort()q=len(temp)-1if temp[0]==0:for i in range(1,q+1):if temp[i]!=0:temp[0]=temp[i]temp[i]=0breaks=0for i in temp:s+=i*10**qq-=1return s