算法-给定一个整数,找出下一个比该整数大且具有相同数字的最小数?
比如:给定38276返回38627,给定34722641返回34724126
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
比如:给定38276返回38627,给定34722641返回34724126
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
a[n] = 34722641 找到 a[i-1]<=a[i]<a[i+1] 3472 2 641 a[i]= 2
在对a[i]为基准判断 那个最小的数字>a[i] 这样既可以 与之交换 2 <-> 4
3472 4 621 现在 621 重新组合 变成126 既可以得到 3472 4 126
右边是低位,从最低为开始查找,34722641的最低位是1,找到第一个小于前一位的数,第四位的2,比第三位的6小,找到这位后,在这位之前的数中找出大于这个数的数(6,4),然后选择这些数中最小的数,6、4、1中这个数就是4,用它和找到的数换位置也就是第四位的2和第二位的4换位置,然后剩下的数进行递增排序,1,6,2排序的结果就是126,所以最后的结果就是34724126。
分三步:
1. 从低位往高位找(计低位的下标为0),直到a[i]<a[i-1];
2. 从a[i-1]到a[0]中找出比a[i]大的而又是最小的那个数记为a[m],且作为a[i]位;
3. 然后由a[i]和a[i-1]到a[0]组合一个最小的数(这一步很简单);
如例子中34722641,发现第4位的2小于它后面的6,则从它后面的那几个数选出比它要大的最小的那个数,即为4,是高几位已经确定:34724,余下的数字是2(a[i]),6,1,组合一个最小的数即126,帮最终的结果为:34724126。
如果数字位数很少,比如38276,总共才5位,可以采用穷举法,列出所有可能的排列,然后在所有可能中找出大于38276的所有数字,在找最小的即可
太水了,变变数也行呀:原题,分析,算法:Given a number, find the next higher number which has the exact same set of digits as the original number