login
Smallest integer m > n such that the multiset of nonzero decimal digits of m is exactly the same as the multiset of nonzero decimal digits of n.
1

%I #33 Feb 24 2023 18:46:40

%S 10,20,30,40,50,60,70,80,90,100,101,21,31,41,51,61,71,81,91,200,102,

%T 202,32,42,52,62,72,82,92,300,103,203,303,43,53,63,73,83,93,400,104,

%U 204,304,404,54,64,74,84,94,500,105,205,305,405,505,65,75,85,95,600

%N Smallest integer m > n such that the multiset of nonzero decimal digits of m is exactly the same as the multiset of nonzero decimal digits of n.

%C Equivalently: a(n) is the number whose decimal digits are the next larger permutation of those of n, allowing any number of leading zeros.

%H M. F. Hasler, <a href="/A360443/b360443.txt">Table of n, a(n) for n = 1..1000</a>

%H Wikipedia, <a href="https://en.wikipedia.org/wiki/Permutation#Generation_in_lexicographic_order">Permutation: Generation in lexicographic order</a>, as of Feb. 2023.

%o (PARI) A360443(n)={forperm(concat(0,digits(n)),p,n||return(fromdigits(Vec(p))); n=0)} \\ _M. F. Hasler_, Feb 23 2023; similar idea also suggested by _Ruud H.G. van Tol_.

%o (Python) # From _Arthur O'Dwyer_, edited by _M. F. Hasler_, Feb 22 2023

%o def A360443(n):

%o s = '0' + str(n)

%o i = next(i for i in range(len(s) - 1, 0, -1) if s[i-1] < s[i])

%o tail = s[i-1:]

%o j = min((ch, j) for j, ch in enumerate(tail) if s[i-1] < ch)[1]

%o s = s[:i-1] + tail[j] + ''.join(sorted(tail[:j] + tail[j+1:]))

%o return int(s)

%o for n in range(100): print(n, A360443(n))

%Y Cf. A057168 (analog for base 2), A354049 (digits of a(n) contain those of n as sub-multiset).

%Y Cf. A009994 (numbers with digits in nondecreasing order: don't appear in this sequence).

%K nonn,easy,base

%O 1,1

%A _Marc LeBrun_ and _M. F. Hasler_, Feb 22 2023