1015. Smallest Integer Divisible by K
Задано целое положительное число k, необходимо найти длину наименьшего целого положительного числа n, такого, что n делится на k, и n содержит только цифру 1. Верните длину n. Если такого n не существует, верните -1. Примечание: n может не поместиться в 64-битное знаковое целое число.
Пример:
Input: k = 1
Output: 1
C# решение
сопоставлено/оригиналpublic class Solution {
public int SmallestRepunitDivByK(int k) {
int num = 1, length = 1;
HashSet<int> seen = new HashSet<int>();
while (num % k != 0) {
if (seen.Contains(num % k)) {
return -1;
}
seen.Add(num % k);
num = (num * 10 + 1) % k;
length++;
}
return length;
}
}
C++ решение
auto-draft, проверить перед отправкой#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public int SmallestRepunitDivByK(int k) {
int num = 1, length = 1;
HashSet<int> seen = new HashSet<int>();
while (num % k != 0) {
if (seen.Contains(num % k)) {
return -1;
}
seen.push_back(num % k);
num = (num * 10 + 1) % k;
length++;
}
return length;
}
}
Java решение
сопоставлено/оригиналpublic class Solution {
public int smallestRepunitDivByK(int k) {
int num = 1, length = 1;
Set<Integer> seen = new HashSet<>();
while (num % k != 0) {
if (seen.contains(num % k)) {
return -1;
}
seen.add(num % k);
num = (num * 10 + 1) % k;
length++;
}
return length;
}
}
JavaScript решение
сопоставлено/оригиналclass Solution {
smallestRepunitDivByK(k) {
let num = 1, length = 1;
let seen = new Set();
while (num % k !== 0) {
if (seen.has(num % k)) {
return -1;
}
seen.add(num % k);
num = (num * 10 + 1) % k;
length++;
}
return length;
}
}
Python решение
сопоставлено/оригиналclass Solution:
def smallestRepunitDivByK(self, k: int) -> int:
num, length = 1, 1
seen = set()
while num % k != 0:
if num % k in seen:
return -1
seen.add(num % k)
num = (num * 10 + 1) % k
length += 1
return length
Go решение
сопоставлено/оригиналfunc smallestRepunitDivByK(k int) int {
num, length := 1, 1
seen := make(map[int]bool)
for num % k != 0 {
if seen[num % k] {
return -1
}
seen[num % k] = true
num = (num * 10 + 1) % k
length++
}
return length
}
Algorithm
Использование остатка для нахождения числа с цифрами 1:
Создайте переменную num и установите ее равной 1.
Создайте переменную length и установите ее равной 1 для отслеживания длины числа.
Итеративное нахождение числа:
Используйте цикл, чтобы умножать num на 10 и добавлять 1 в каждой итерации, и каждый раз вычисляйте остаток от деления num на k.
Увеличивайте length на 1 в каждой итерации.
Если в какой-то итерации num % k == 0, верните length.
Проверка бесконечного цикла:
Вакансии для этой задачи
Показаны активные вакансии с пересечением по тегам задачи.