前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2022-05-05:给定一个正数num,要返回一个大于num的数,并且每一位和相邻位的数字不能相等

2022-05-05:给定一个正数num,要返回一个大于num的数,并且每一位和相邻位的数字不能相等

作者头像
福大大架构师每日一题
发布2022-06-04 10:45:22
4030
发布2022-06-04 10:45:22
举报

2022-05-05:给定一个正数num,要返回一个大于num的数,并且每一位和相邻位的数字不能相等.

返回达标的数字中,最小的那个。

来自微软。

答案2022-05-05:

从左往右看,是否有相邻两位相同的数字。如果有,则低位加1,低位右边全变成0,递归。

代码用rust编写。代码如下:

代码语言:javascript
复制
fn main() {
    let answer = near(766665);
    println!("answer = {}", answer);
}

fn near(num: isize) -> isize {
    // num = 174
    // "0175"
    // num = 899
    // "0900"
    // num = 999
    // "01000"
    let mut raw = format!("0{}", num + 1).chars().collect::<Vec<_>>();
    process(&mut raw);
    return raw.iter().collect::<String>().parse::<isize>().unwrap();
}

fn process(raw: &mut Vec<char>) {
    for i in 1..raw.len() {
        if raw[(i - 1) as usize] == raw[i as usize] {
            add_one(raw, i as isize);
            for j in i + 1..raw.len() {
                raw[j as usize] = '0';
            }
            process(raw);
            return;
        }
    }
}

// 99.....
//  +1
//100
fn add_one(r: &mut Vec<char>, i: isize) {
    let mut i: isize = i;
    while r[i as usize] == '9' {
        r[i as usize] = '0';
        i -= 1;
    }
    r[i as usize] = (r[i as usize] as u8 + 1) as char;
}

执行结果如下:

***

[左神java代码](https://github.com/algorithmzuo/weekly-problems/blob/main/src/class_2022_02_4_week/Code02_NearBiggerNoSameNeighbour.java)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档