进行位数排序即可,需要区分正数和负数。
给你一个整数 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 。
提示:
-1015 <= num <= 1015
-spec smallest_number(Num :: integer()) -> integer().
smallest_number(Num) ->
List = do_list(abs(Num), []),
if
Num =:= 0 ->
0;
Num > 0 ->
{Ans, _Has} = lists:foldl(fun(N, {Min, Has}) ->
if
N =:= 0 ->
{Min*10, Has};
Has =:= 0 ->
{Min*N, 1};
true ->
{Min*10+N, 1}
end
end, {1,0}, List),
Ans;
true ->
Ans = lists:foldl(fun(N, Min) ->
Min*10+N
end, 0, lists:reverse(List)),
-Ans
end.
do_list(0, List) ->
lists:sort(List);
do_list(Num, List) ->
do_list(Num div 10, [Num rem 10 | List]).

本文探讨如何通过位数排序实现整数 num 的最小值重排,确保结果不含前导零并保持原始符号。通过示例和代码展示如何解决这一问题,适用于数值范围 [-1015, 1015]。
&spm=1001.2101.3001.5002&articleId=122827761&d=1&t=3&u=cfe542aa25814d83b2ff20be6e3ac3af)
5005

被折叠的 条评论
为什么被折叠?



