728. Self Dividing Numbers
Например, 128 является саморазделяющимся числом, потому что 128 % 1 == 0, 128 % 2 == 0 и 128 % 8 == 0. Саморазделяющееся число не может содержать цифру ноль. Если даны два целых числа left и right, верните список всех саморазделяющихся чисел в диапазоне [left, right].
Пример:
Input: left = 1, right = 22
Output: [1,2,3,4,5,6,7,8,9,11,12,15,22]
C# решение
сопоставлено/оригиналpublic class Solution {
public IList<int> SelfDividingNumbers(int left, int right) {
List<int> result = new List<int>();
for (int num = left; num <= right; num++) {
if (IsSelfDividing(num)) {
result.Add(num);
}
}
return result;
}
private bool IsSelfDividing(int num) {
int n = num;
while (n > 0) {
int digit = n % 10;
if (digit == 0 || num % digit != 0) {
return false;
}
n /= 10;
}
return true;
}
}
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 vector<int> SelfDividingNumbers(int left, int right) {
List<int> result = new List<int>();
for (int num = left; num <= right; num++) {
if (IsSelfDividing(num)) {
result.push_back(num);
}
}
return result;
}
private bool IsSelfDividing(int num) {
int n = num;
while (n > 0) {
int digit = n % 10;
if (digit == 0 || num % digit != 0) {
return false;
}
n /= 10;
}
return true;
}
}
Java решение
сопоставлено/оригиналimport java.util.ArrayList;
import java.util.List;
public class Solution {
public List<Integer> selfDividingNumbers(int left, int right) {
List<Integer> result = new ArrayList<>();
for (int num = left; num <= right; num++) {
if (isSelfDividing(num)) {
result.add(num);
}
}
return result;
}
private boolean isSelfDividing(int num) {
int n = num;
while (n > 0) {
int digit = n % 10;
if (digit == 0 || num % digit != 0) {
return false;
}
n /= 10;
}
return true;
}
}
JavaScript решение
сопоставлено/оригиналvar selfDividingNumbers = function(left, right) {
function isSelfDividing(num) {
let n = num;
while (n > 0) {
let digit = n % 10;
if (digit === 0 || num % digit !== 0) {
return false;
}
n = Math.floor(n / 10);
}
return true;
}
const result = [];
for (let num = left; num <= right; num++) {
if (isSelfDividing(num)) {
result.push(num);
}
}
return result;
};
Python решение
сопоставлено/оригиналfunc selfDividingNumbers(_ left: Int, _ right: Int) -> [Int] {
func isSelfDividing(_ num: Int) -> Bool {
var n = num
while n > 0 {
let digit = n % 10
if digit == 0 || num % digit != 0 {
return false
}
n /= 10
}
return true
}
var result = [Int]()
for num in left...right {
if isSelfDividing(num) {
result.append(num)
}
}
return result
}
Go решение
сопоставлено/оригиналpackage main
func selfDividingNumbers(left int, right int) []int {
var result []int
for num := left; num <= right; num++ {
if isSelfDividing(num) {
result = append(result, num)
}
}
return result
}
func isSelfDividing(num int) bool {
n := num
for n > 0 {
digit := n % 10
if digit == 0 || num % digit != 0 {
return false
}
n /= 10
}
return true
}
Algorithm
Переберите все числа в диапазоне от left до right.
Для каждого числа проверьте, является ли оно саморазделяющимся: Разделите число на его цифры. Убедитесь, что ни одна цифра не равна нулю и число делится на каждую из своих цифр без остатка.
Добавьте саморазделяющиеся числа в результативный список и верните его.
😎
Вакансии для этой задачи
Показаны активные вакансии с пересечением по тегам задачи.
Активных вакансий пока нет.