class Solution {
public:
vector<int> selfDividingNumbers(int left, int right) {
vector<int> re;
for(int i=left; i<=right;i++){
int temp=i;
while(temp !=0 && temp %10 != 0){
if(i % (temp % 10) != 0) break;
temp = temp / 10;
}
if(temp == 0) re.push_back(i);
}
return re;
}
};
这个题竟然做不出来。
自己写了个调用子函数:
class Solution {
public:
vector<int> selfDividingNumbers(int left, int right) {
vector<int> res;
for (int i = left; i <= right; i++) {
if (isSelfDividingNumbers(i))
res.push_back(i);
}
return res;
}
bool isSelfDividingNumbers(int i)
{
if (i%10)
{
int temp=i;
if(temp!=0)
{
if(i%(temp%10)!=0)
return false;
temp=temp/10;
}
if(temp==0)
return true;
}
}
};返回值写的不对。
参考百度写了另一个答案:
public:
vector<int> selfDividingNumbers(int left, int right) {
vector<int> res;
for (int i = left; i <= right; i++) {
if (isSelfDividingNumbers(i))
res.push_back(i);
}
return res;
}
bool isSelfDividingNumbers(int i)
{
int temp=i;
while(temp%10)
{
if(i%(temp%10)!=0)
return false;
temp=temp/10;
}
return true;
}
};submission不行;
自己找出来问题;判断语句不对:
class Solution {
public:
vector<int> selfDividingNumbers(int left, int right) {
vector<int> res;
for (int i = left; i <= right; i++) {
if (isSelfDividingNumbers(i))
res.push_back(i);
}
return res;
}
bool isSelfDividingNumbers(int i)
{
int temp=i;
while(temp)
{
if(temp%10==0||i%(temp%10)!=0)
return false;
temp=temp/10;
}
return true;
}
};更简洁的答案:
class Solution {
public:
vector<int> selfDividingNumbers(int left, int right) {
vector<int> res;
for (int i = left; i <= right; i++) {
if (isSelfDividingNumbers(i))
res.push_back(i);
}
return res;
}
bool isSelfDividingNumbers(int nums)
{
int temp=nums,digit=0;
while(temp)
{
digit=temp%10;
if(digit==0||nums%digit!=0)
return false;
temp=temp/10;
}
return true;
}
};
本文探讨了如何找出指定范围内所有自除数的算法实现。自除数是指可以被其每一位数字整除的数,例如128是自除数因为128 % 1 == 0, 128 % 2 == 0, 128 % 8 == 0。文章提供了多种C++代码实现方案,并逐步改进,最终得到简洁有效的解决方案。
171

被折叠的 条评论
为什么被折叠?



