Рубрики
Без рубрики

Решение: мощные целые числа

Это является частью серии объяснений решений LeetCode (индекс). Если вам понравилось это решение или fou … с меткой алгоритмы, JavaScript, Java, Python.

LeetCode Solutions (161 серия деталей)

Это является частью серии объяснений решения LeetCode ( index ). Если вам понравилось это решение или нашли его полезным, Пожалуйста, нравится Этот пост и/или upvote Мое решение по сообщению на форумах LeetCode Анкет

Проблема LeetCode #970 (средняя): Мощные целые числа

Описание:

( прыгнуть в : Идея решения Код : JavaScript | Python | Java | C ++

Учитывают три целых числа x , y и Связанный В вернуть список всех Мощные целые числа которые имеют значение меньше или равны Связанный Анкет

Целое число – это мощный Если это может быть представлено как xi + yj для некоторых целых чисел i и J Анкет

Вы можете вернуть ответ в любом порядке. В вашем ответе каждое значение должно происходить максимум раз Анкет

Примеры:

Вход:
Выход: [2,3,4,5,7,9,10]
Объяснение:
Вход:
Выход: [2,4,6,8,10,14]

Ограничения:

  • 1, y
  • 0^6

Идея:

( Прыгните к : Описание задачи Код : JavaScript | Python | Java | C ++

Эта проблема довольно простая. Поскольку нам нужно вернуть все мощные целые числа, а не просто их количество, мы не так много ярлыков, которые мы можем взять; Нам придется на самом деле придумать решение итеративно с вложенными петлями.

Во -первых, мы можем использовать установить Структура ( и ), чтобы предотвратить дубликаты ответов. Тогда мы можем иметь наши вложенные петли увеличения силы x и y Значения при добавлении соответствующих результатов в наш набор.

Одна несколько сложная ситуация возникает, когда одна или несколько значений – это 1 , как эта сила будет продолжать быть 1 навсегда, независимо от показателя. Чтобы справиться с этим, мы можем заставить каждую вложенную петлю к перерыв После первой итерации, если его первоначальное значение было 1 Анкет

После того, как мы переживаем все возможные комбинации, мы можем преобразовать Анс к массиву и возврат Это.

Реализация:

Есть только незначительные различия в коде каждого языка.

Код JavaScript:

( Прыгните к : Описание задачи Идея решения

var powerfulIntegers = function(x, y, bound) {
    let ans = new Set()
    for (let xi = 1; xi < bound; xi *= x) {
        for (let yj = 1; xi + yj <= bound; yj *= y) {
            ans.add(xi + yj)
            if (y === 1) break
        }
        if (x === 1) break
    }
    return Array.from(ans)
}

Код Python:

( Прыгните к : Описание задачи Идея решения

class Solution:
    def powerfulIntegers(self, x: int, y: int, bound: int) -> List[int]:
        ans, xi = set(), 1
        while xi < bound:
            yj = 1
            while xi + yj <= bound:
                ans.add(xi + yj)
                if y == 1: break
                yj *= y
            if x == 1: break
            xi *= x
        return list(ans)

Код Java:

( Прыгните к : Описание задачи Идея решения

class Solution {
    public List powerfulIntegers(int x, int y, int bound) {
        Set ans = new HashSet<>();
        for (int xi = 1; xi < bound; xi *= x) {
            for (int yj = 1; xi + yj <= bound; yj *= y) {
                ans.add(xi + yj);
                if (y == 1) break;
            }
            if (x == 1) break;
        }
        return new ArrayList(ans);
    }
}

C ++ Код:

( Прыгните к : Описание задачи Идея решения

class Solution {
public:
    vector powerfulIntegers(int x, int y, int bound) {
        unordered_set ans;
        for (int xi = 1; xi < bound; xi *= x) {
            for (int yj = 1; xi + yj <= bound; yj *= y) {
                ans.insert(xi + yj);
                if (y == 1) break;
            }
            if (x == 1) break;
        }
        return vector(ans.begin(), ans.end());
    }
};

LeetCode Solutions (161 серия деталей)

Оригинал: “https://dev.to/seanpgallivan/solution-powerful-integers-1o2p”