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;
执行结果如下:
以上是关于2022-05-05:给定一个正数num,要返回一个大于num的数,并且每一位和相邻位的数字不能相等. 返回达标的数字中,最小的那个。 来自微软。的主要内容,如果未能解决你的问题,请参考以下文章
2022-01-11:给定一个正数数组arr长度为n正数x正数y。 你的目标是让arr整体的累加和<=0, 你可以对数组中的数num执行以下三种操作中的一种,且每个数最多能执行一次操作 : 1.
2021-08-28:给定一个正数数组arr,长度一定大于6(>=7),一定要选3个数字做分割点,从而分出4个部分,并且每部分都有数,分割点的数字直接删除,不属于任何4个部分中的任何一个。 返回有没有