欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

728|Self Dividing Numbers

程序员文章站 2022-07-15 10:50:49
...

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(不包含0).

Given a lower and upper number bound(界), output a list of every possible self dividing number, including the bounds if possible.

Example 1:
Input:
left = 1, right = 22
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.

第一种方法:转化成String类型,这样一个一个遍历数字方便

存在的知识点:是字符类型时,来nums(整数)%自己的每一位字符的时候,是字符不是数字的运算,要考虑这个问题。
如果现在想要判断128%‘1‘是不是为0,‘1’的ASCII码为49(二进制表示的),48(二进制表示的48)是字符‘0’的ASCII码,但是数字1在计算机以(二进制表示的1)存放,所以‘1’转成数字1的方法是 ‘1’-‘0’=49-48=1.所以128%(‘1’-‘0’)的值可以判断

class Solution {
    public List<Integer> selfDividingNumbers(int left, int right) {
              List<Integer> self_driving_nums=new ArrayList();
              for(int i=left;i<=right;i++){
                  if(isSelfDriving(i))
                   self_driving_nums.add(i);
              }

         return self_driving_nums;
    }
    public boolean isSelfDriving(int num){
        for(char c:String.valueOf(num).toCharArray()){
            if(c=='0'||num%(c-'0')>0){
                return false;
            }
        }
        return true;
    } 
}

第二种方法:双重循环,比如left=1,right=1258,那外部循环就是i=1一直循环到1258,然后 内部循环就是把i的每个数来判断,每次判断 为0吗和是不是除以每个数字==0

class Solution {
    public List<Integer> selfDividingNumbers(int left, int right) {
              List<Integer> list=new ArrayList<>();
            
              for(int i=left;i<=right;i++){
                  int j=i;
                  //1258
                  //1258%(1258%10=8)==0
                  //j=1258/10=125
                  //1258%(125%10=5)==0
                  //j=125/10=12
                  //1258%(12%10=2)==0
                  //j=12/10=1
                  //1258%(1%10=1)==0
                  //因为除以自己的每个数都为0,所以1258是自除数字
                  for(;j>0;j/=10){
 //不是0,自除数字不能含一个0|| 自除数字的条件:自除数字%(自除的数字每一位数[个十百千万])==0     
                      if((j%10==0)||(i%(j%10)!=0)) break;
                  }
                  if(j==0) list.add(i);
              }
       return list;
    }
}

728|Self Dividing Numbers

相关标签: leedcode_Algorithm