一道百度笔试题(求算法),该如何处理

一道百度笔试题(求算法)
给定一个数字编码N,大多数情况下可以找到一个数字编码M,其位数与编码N相等(编码可以从0开始),各位数字之和与编码N中各位数字之和相等,并且M是数值大于N的所有码中最小的一个,也可能要找的编码M不存在。

如给定编码N=134,则编码M=143;给定编码N=020,则编码M=101,形式化表述为f(N)=M,如果M不存在,则

f(N)=-1。

现在给定一个起始编码N, N的数字位数最大不超过1000,N 的数值最大不超过10^500,要求给出序列S(N),其中S(0)=N,S(1)=f(N),S(2)=f(S(1)),S(3)=f(S(2))...,当S(i+1)<0时序列结束,但小于0的元素不包含在序列中,要求给出算法思路和函数。

求一简洁漂亮的算法,不要代码。

------解决方案--------------------
高位到低位的顺序枚举,每一位从小到大枚举,每到一个状态记录,剩下多少个数字没有枚举,加上少量剪枝,比如剩下的和为19,而只余下两位。
------解决方案--------------------
这个要从最低位开始吧
遇到下面情况时可以结束:
1,相邻高位数字小于低位数字
2,高位数字不是9,且其他数字不是0

找到这样的位置后,再高位+1,低位按数字和减去新的高位数字即可。

------解决方案--------------------
从低位到高位找到一个非0的x,向高位进1,并将个位设为x-1
------解决方案--------------------
探讨
从低位到高位找到一个非0的x,向高位进1,并将个位设为x-1