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

题目描述:

给定正整数 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<int> 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<bool> 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;
            }
        }
    }
};
posted @ 2019-06-21 17:29  zhanzq1  阅读(440)  评论(0)    收藏  举报