【正确答案】方法一:蛮力法 最容易想到的方法就是对这个给定的数加1,然后判断这个数是不是“不重复数”,如果不是,那么继续加1,直到找到“不重复数”为止。显然这种方法的效率非常低下。
方法二:从右到左的贪心法 例如给定数字11099,首先对这个数字加1,变为11000,接着从右向左找出第一对重复的数字00,对这个数字加1,变为11001,继续从右向左找出下一对重复的数00,将其加1,同时把这一位往后的数字变为0101…串(当某个数字自增后,只有把后面的数字变成0101…,才是最小的不重复数字),这个数字变为11010,接着采用同样的方法,11010->12010就可以得到满足条件的数。
需要特别注意的是当对第i个数进行加1操作后可能会导致第i个数与第i+1个数相等,因此,需要处理这种特殊情况,下图以99020为例介绍处理方法。
【答案解析】[考点] 如何找最小的不重复数