本文主要是介绍erlang算法系列-leetcode 2165. 重排数字的最小值(中等),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
进行位数排序即可,需要区分正数和负数。
重排数字的最小值-原题
给你一个整数 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), []),ifNum =:= 0 ->0;Num > 0 ->{Ans, _Has} = lists:foldl(fun(N, {Min, Has}) ->ifN =:= 0 ->{Min*10, Has};Has =:= 0 ->{Min*N, 1};true ->{Min*10+N, 1}endend, {1,0}, List),Ans;true -> Ans = lists:foldl(fun(N, Min) ->Min*10+N end, 0, lists:reverse(List)),-Ansend.do_list(0, List) ->lists:sort(List);
do_list(Num, List) ->do_list(Num div 10, [Num rem 10 | List]).
这篇关于erlang算法系列-leetcode 2165. 重排数字的最小值(中等)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!