next-unique-digit-number

504 篇文章 0 订阅

转自:http://www.fgdsb.com/2015/01/03/next-unique-digit-number/


有一种integer序列满足以下条件

  1. 非负
  2. 不能有重复的digit,比如11是不合法的
  3. 递增,既后面产生的比前面产生的要大,比如10的下一个数字是12
    显然,这组数字的范围为[0, 9876543210]

输入一个一定符合该条件的数字,返回下一个(比输入大但是最小的)数。
如果不存在这样的下一个数,则返回0
For example:
Given 789
Next integer should be 790
Given 98
Next integer should be 102
Given 9876543210
Just return 0

     
     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
     
     
uint64_t get_next_number(uint64_t n) {
if(n >= 9876543210) return 0;
auto check_valid = [](uint64_t num) {
bool used[ 10] = { false};
while(num) {
if(used[num % 10]) return false;
used[num % 10] = true;
num /= 10;
}
return true;
};
while(!check_valid(++n));
return n;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值