题目:
自己写的代码:直接使用一个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 之间的一个随机整数。
- 如果要返回一个固定长度的vector,可以直接使用return {a,b};