嘻嘻,这道题,2010年5月zoj月赛的题,当时我做啦~没做对。。。一直放着,今天看到了,就想了想。
记得当时比赛过后,有人在百度知道问这题怎么做,我还把WY学姐的代码贴上了,党也贴了个,今天一看,下面居然有人回复了,说错的代码页敢贴 = =。。无语死,当时WY学姐过了呀。。。
思路很简单,比如1988 ,最后一位减1,倒数第二位加1即可,变为1997.
特殊情况,18880,逆序后,08881,找第一个不为0的数,减1,再继续找第一个不为9的数,加1,即19881,逆置,18891.
BUT。
1838950,按上面的做法后,不就成1839940了?有比1839940更小而且比1838950大的,1839049,问题出来了,怎么使找到最小的呢?我唯一能想到的就是,排序。数据量不大,就230组,最大1000个,随意啦。
逆置后,将前几位(到第一个不是9的位置为止),按从大到小排序,再逆序输出即可。
稍微费时一点10ms过了。