1015. 可被 K 整除的最小整数

1015. 可被 K 整除的最小整数

  • 原题链接:
  • 完成情况:
  • 解题思路(一):
    • 方法一:遍历:
  • 解题思路(二):
    • 方法二:优化:

原题链接:

1015. 可被 K 整除的最小整数

https://leetcode.cn/problems/smallest-integer-divisible-by-k/submissions/

完成情况:

1015. 可被 K 整除的最小整数_第1张图片

解题思路(一):

方法一:遍历:

1015. 可被 K 整除的最小整数_第2张图片

package LeetCode中等题;

import java.util.HashSet;
import java.util.Set;

public class __1015可被K整除的最小整数 {
    /**
     全部由1构成的数组,然后要求能整除k
     然后求得是最小的 长度。

     * @param k
     * @return
     */
    public int smallestRepunitDivByK(int k) {
        int reSid = 1%k ,len = 1;   //reSid为余数,len为数字长度,初始值为1
        Set<Integer> set = new HashSet<Integer>();  //创建一个无序集合,用于存储余数
        set.add(reSid); //插入余数1
        while (reSid != 0){
            reSid = (reSid * 10 + 1) % k;
            len++;
            if (set.contains(reSid)){
                return -1;
            }
            set.add(reSid);
        }
        return len;
    }
}

解题思路(二):

方法二:优化:

1015. 可被 K 整除的最小整数_第3张图片

package LeetCode中等题;

public class __1015可被K整除的最小整数__优化 {
    /**


     * @param k
     * @return
     */
    public int smallestRepunitDivByK(int k) {
        //若 k 能被 2 或 5 整除,则无解,返回 -1
        if (k % 2 == 0 || k % 5 == 0){
            return -1;
        }
        //初始化余数为1,表示一个数得最低位是1
        int reSid = 1 % k,len = 1;
        //若余数不为0,继续迭代
        while (reSid != 0){
            //计算下一个数的余数,下一个数在当前余数后加一个 1
            reSid = (reSid * 10 + 1) % k;
            len++;
        }
        //返回数字 1 的最小重复次数
        return len;
    }
}

你可能感兴趣的:(算法知识,#,LeetCode题解,java学习,leetcode,java,算法,分治法,数据结构)