carloscn / structstudy

Leetcode daily trainning by using C/C++/RUST programming.
4 stars 1 forks source link

leetcode1317:将整数转换为两个无零整数的和(convert-integer-to-the-sum-of-two-no-zero-integers) #207

Open carloscn opened 1 year ago

carloscn commented 1 year ago

问题描述

「无零整数」是十进制表示中 不含任何 0 的正整数。

给你一个整数 n,请你返回一个 由两个整数组成的列表 [A, B],满足:

A 和 B 都是无零整数 A + B = n 题目数据保证至少有一个有效的解决方案。

如果存在多个有效解决方案,你可以返回其中任意一个。

 

示例 1:

输入:n = 2 输出:[1,1] 解释:A = 1, B = 1. A + B = n 并且 A 和 B 的十进制表示形式都不包含任何 0 。 示例 2:

输入:n = 11 输出:[2,9] 示例 3:

输入:n = 10000 输出:[1,9999] 示例 4:

输入:n = 69 输出:[1,68]

示例 5:

输入:n = 1010 输出:[11,999]

提示:

2 <= n <= 10^4

carloscn commented 1 year ago

问题分析

区分两个概念,一个是非零整数,一个是无零整数。无零整数就是不包含0的整数,例如100, 1010, 1098 都是含0整数。因此需要对生成的数字进行判断。我们可以取随机数,生成之后判定,不行的话就重新生成。


use rand::Rng;

pub fn get_no_zero_integers(n: i32) -> Vec<i32>
{
    let mut ret:Vec<i32> = vec![];

    if n < 2 {
        return ret;
    }
    let mut rng_ctx = rand::thread_rng();
    let mut rand = 1;
    let mut left = n - rand;

    while rand.to_string().contains("0") || left.to_string().contains("0") {
        rand = rng_ctx.gen_range(2..n-1);
        left = n - rand;
    }

    ret.push(rand);
    ret.push(left);

    return ret;
}
carloscn commented 1 year ago

code

https://review.gerrithub.io/c/carloscn/structstudy/+/553419 https://github.com/carloscn/structstudy/commit/2338aa906af7160597bad3470d5836689b1bef5f