2022-05-05:给定一个正数num,要返回一个大于num的数,并且每一位和相邻位的数字不能相等. 返回达标的数字中,最小的那个。 来自微软。

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022-05-05:给定一个正数num,要返回一个大于num的数,并且每一位和相邻位的数字不能相等. 返回达标的数字中,最小的那个。 来自微软。相关的知识,希望对你有一定的参考价值。

2022-05-05:给定一个正数num,要返回一个大于num的数,并且每一位和相邻位的数字不能相等.
返回达标的数字中,最小的那个。
来自微软。

答案2022-05-05:

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

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

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代码

以上是关于2022-05-05:给定一个正数num,要返回一个大于num的数,并且每一位和相邻位的数字不能相等. 返回达标的数字中,最小的那个。 来自微软。的主要内容,如果未能解决你的问题,请参考以下文章

2022-01-11:给定一个正数数组arr长度为n正数x正数y。 你的目标是让arr整体的累加和<=0, 你可以对数组中的数num执行以下三种操作中的一种,且每个数最多能执行一次操作 : 1.

JavaScript面试题:重复输出一个给定的字符串

LeetCode 两数之和 twoSum

9.33 画匠问题

2021-08-28:给定一个正数数组arr,长度一定大于6(>=7),一定要选3个数字做分割点,从而分出4个部分,并且每部分都有数,分割点的数字直接删除,不属于任何4个部分中的任何一个。 返回有没有

重复输出一个给定的字符串