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

目录

  • 题目描述:
  • 示例 1:
  • 示例 2:
  • 示例 3:
  • 解法:

题目描述:

给定正整数 K,你需要找出可以被 K 整除的、仅包含数字 1 的最小正整数 N。

返回 N 的长度。如果不存在这样的 N,就返回 -1。

 

示例 1:

输入:1
输出:1
解释:最小的答案是 N = 1,其长度为 1。

示例 2:

输入:2
输出:-1
解释:不存在可被 2 整除的正整数 N 。

示例 3:

输入:3
输出:3
解释:最小的答案是 N = 111,其长度为 3。

提示:

  • 1 <= K <= 10^5

解法:

class Solution {
public:
    int smallestRepunitDivByK(int K) {
        if(K%2 == 0){
            return -1;
        }else{
            int res = 1;
            int val = 1;
            unordered_set st;
            while(st.find(val) == st.end() && val%K != 0){
                st.insert(val);
                val %= K;
                res++;
                val *= 10;
                val++;
            }
            if(st.find(val) == st.end()){
                return res;
            }else{
                return -1;
            }
        }
    }

    int smallestRepunitDivByK2(int K) {
        if(K%2 == 0){
            return -1;
        }else{
            int res = 1;
            int val = 1;
            vector st(K, false);
            val %= K;
            st[0] = true;
            while(st[val] == false){
                st[val] = true;
                res++;
                val *= 10;
                val++;
                val %= K;
            }
            if(val == 0){
                return res;
            }else{
                return -1;
            }
        }
    }
};

转载于:https://www.cnblogs.com/zhanzq/p/11065878.html

你可能感兴趣的:(leetcode 1015. 可被 K 整除的最小整数)