每周一算法2017.12.8
Self Dividing Numbers
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. 
Note: 
The boundaries of each input argument are 1 <= left <= right <= 10000.
描述
自分数就是可以整除的数字中每一位数的那个数。 例如,128就是一个自分数,因为128 % 1 == 0, 128 % 2 == 0, and 128 % 8 == 0。 当然,由此判断自分数中不含有数字0。 给定一个下界和上界,输出一个自分数的数组,如果可能的话,包括边界。 注意: 输入的范围1 <= left <= right <= 10000
分析
遍历给定边界的数组,对每个数字进行判断,符合要求的放到要返回的数组。 获取每位上的数字,判断是否能被整除,注意不能为零。
时间复杂度
复杂度为O(mn),m=right -left,n是for循环里面循环次数
Java
class Solution {  
   public List<Integer> selfDividingNumbers(int left, int right) {
      List<Integer> list = new ArrayList<Integer>();
      for (int num = left;num<=right;num++) {
          if (isSelfDividingNumber(num)) {
             list.add(num);
          }
       }
      return list;
   }
   public boolean isSelfDividingNumber(int num) {
      int n=num;
      while(n>0){
         if (n%10 == 0 || num%(n%10) != 0) {
             return false;
         }
         n/=10;
      }
      return true;
    }
}
C++
class Solution {
public:  
    vector<int> selfDividingNumbers(int left, int right) {
        vector<int> vec ;
        for(int i = left; i <= right ; i++){
            bool flag = true ;
            int t = i ;
            while(t){
                int d = t%10 ;
                if (d == 0 || i%d ){
                    flag = false ;
                    break ;
                }
                t /= 10 ;
            }
            if (flag)
                vec.push_back(i) ;
        }
        return vec ;
    }
};
Swift
class Solution {
     func selfDividingNumbers(_ left: Int, _ right: Int) -> [Int] {
        var arr:[Int] = []
        for i in left...right {
            if isSelfDivingNumber(num: i) {
                arr.append(i)
            }
        }
        return arr
    }
    func isSelfDivingNumber(num:Int) -> Bool {
        var temp = num
        var div = 0
        while temp > 0 {
            div = temp % 10
            if div == 0 {
                return false
            } else if num%div != 0 {
                return false
            } else {
                temp = temp/10
            }
        }
        return true
    }
 }
本题来自LeetCode
