解题思路

每个Num的1的个数是Num div 2(即Num向右移动1位的结果)的1的个数加上Num rem 2(即与2取余后的代表奇偶数的那个1)得到的总个数

代码

-spec count_bits(N :: integer()) -> [integer()].
count_bits(N) ->
    do_conut_bits(0, _MapTemp = #{}, _ListOut = [], _Args = #{count => N}).

do_conut_bits(N, MapTemp, ListOut, Args = #{count := Count}) when N =< Count ->
    Bit = maps:get(N div 2, MapTemp, N) + (N rem 2),
    do_conut_bits(N + 1, MapTemp#{N => Bit}, [Bit | ListOut], Args);
do_conut_bits(_, _, ListOut, _) ->
    lists:reverse(ListOut).