LeetCode Weekly Contest 171

题目:
在这里插入图片描述
自己写的代码:直接使用一个checkzero 函数来检测生成的结果是不是含有零元素。

class Solution {
public:
    vector<int> getNoZeroIntegers(int n) {
        vector<int> res{1,n-1};
        while(checkzero(res[0])==false || checkzero(res[1])==false){
            ++res[0];
            --res[1];          
        }
        return res;
        
    }
    
    bool checkzero(int n){
        if (n==0) return false;
        while(n>=10 && n>0){
            int yu =n%10;
            if (yu==0) return false;
            n/=10;
        }
        return true;
        
    }
};

优秀代码:

class Solution {
public:
    vector<int> getNoZeroIntegers(int n) {
        while (true) {
            int a = rand() % n;
            int b = n - a;
            if (IsNoZeroInteger(a) && IsNoZeroInteger(b)) return {a, b};
        }
        return {};
    }
    
private:
    bool IsNoZeroInteger(int n) {
        if (n <= 0) return false;
        do {
            if (n % 10 == 0) return false;
            n /= 10;
        } while (n);
        return true;
    }
};

时间复杂度:0(1)
空间复杂度:哦(1)

反思改进策略:
1.cpp中使用rand()产生随机数。

C++中rand() 函数的用法

1、rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。

2、如果你要产生0~99这100个整数中的一个随机整数,可以表达为:int num = rand() % 100;
这样,num的值就是一个0~99中的一个随机数了。
3、如果要产生1~100,则是这样:int num = rand() % 100 + 1;

4、总结来说,可以表示为:int num = rand() % n +a;
其中的a是起始值,n-1+a是终止值,n是整数的范围。
5、一般性:rand() % (b-a+1)+ a ; 就表示 a~b 之间的一个随机整数。

  1. 如果要返回一个固定长度的vector,可以直接使用return {a,b};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值