首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

【有趣的口试算法题】之四 求最小不重复数,源于百度2014届校园招聘软件研发岗位深圳站

2013-10-08 
【有趣的面试算法题】之四 求最小不重复数,源于百度2014届校园招聘软件研发岗位深圳站百度2014届校园招聘软

【有趣的面试算法题】之四 求最小不重复数,源于百度2014届校园招聘软件研发岗位深圳站

        百度2014届校园招聘软件研发岗位深圳站的笔试中有这样一题:输入一个任意正整数,输出一个比输入值要大但又不重复的最小数(不重复是指:相邻两个数字不相同,例如1101是重复,1234不重复,1201不重复),比如输入1234,应当输出1235,而不是 1232、1236、4321等。


分析思路:

一,考虑数值区间。尽量选择一个容器比较大的类型,以便不溢出,unsigned long long就比较适合。当然,也可以考虑数组/字符串形式表示任意大的数值,只是,题目只是讲“输入一个任意正整数”,所以我们在接口上也就暂不考虑这种形式。


二,数值表达形式。虽然接口上没有采用以数组/字符串形式表示数值,但我们应当在程序内部考虑这一形式,方便“不重复”检查。


三,先保大再不重。从数值的最高位起,两两检查是否相同,如果相同,则在低位加一,并检查级联进位情况,记录最后有加一操作的位置。 从这一位置开始【不包含它本身】向低位方向,顺次按010101...规律填充,如此保证取值最小。


代码示例:



热点排行