728. Self Dividing Numbers(python+cpp)

题目:

A self-dividing number is a number that is divisible by every digit it contains.
For example, 128 is a self-dividing number because 128 % 1 == 0, 128 %2 == 0, and 128 % 8 == 0. Also, a self-dividing number is not allowed to contain the digit zero.
Given a lower and upper number bound, output a list of every possible
self dividing number, including the bounds if possible.

Example 1:
Output: [1, 2, 3, 4, 5, 6, 7,8, 9, 11, 12, 15, 22]
Note:
The boundaries of each input argument are 1 <= left <= right <= 10000.

解释:
用一个函数判断是否是self-dividing。

python代码:

class Solution(object):
    def isselfdividing(self,num):
        n=num
        r_list=[]
        while n>0:
            n,r=divmod(n,10)
            r_list.append(r)
        for r in r_list:
            if r!=0 and num%r==0:
                continue
            else:
                return False
        return True
            
    def selfDividingNumbers(self, left, right):
        """
        :type left: int
        :type right: int
        :rtype: List[int]
        """
        result=[]
        for i in range(left,right+1):
            if (self.isselfdividing(i)):
                result.append(i)
        return result

c++代码:

#include <vector>
using namespace std;
class Solution {
public:
    bool isSelfDividing(int num)
    {
        int n=num;
        int r=0;
        vector<int> r_list;
        while (n>0)
        {
            r=n%10;
            n=n/10;
            r_list.push_back(r);
        }
        for (auto r :r_list)
        {
            if(r!=0 && num%r==0)
                continue;
            else
                return false;
        }
        return true;
        
    }
    vector<int> selfDividingNumbers(int left, int right) {
        vector<int> result;
        for(int i=left;i<=right;i++)
        {
            if (isSelfDividing(i))
                result.push_back(i);
            
        }
        return result;
        
    }
};

总结:
python的divmod函数很牛逼。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值