Java | LeetCode
前往频道在 Telegram
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+icUwivvbGOkwNWRi Вопросы собесов t.me/+7ESm0VKXC4tjYzky Вакансии t.me/+4pspF5nDjgM4MjQy
显示更多6 661
订阅者
-424 小时
-177 天
-4530 天
帖子存档
6 660
Курс "Дизайн карточек для WB и Ozon". Бесплатно и с нуля
Дизайнер карточек для маркетплейсов — востребованная и доходная профессия 💰
Научись ей бесплатно!
- Бесплатный доступ
- Разбор ДЗ от наставника
- Мощные кейсы в портфолио
Узнать больше
#реклама 16+
yudaevschool24.online
О рекламодателе
6 660
Задача: 1428. Leftmost Column with at Least a One
Сложность: medium
Строково-отсортированная бинарная матрица означает, что все элементы равны 0 или 1, и каждая строка матрицы отсортирована в неубывающем порядке.
Дана строково-отсортированная бинарная матрица binaryMatrix, верните индекс (начиная с 0) самого левого столбца, содержащего 1. Если такого индекса не существует, верните -1.
Вы не можете напрямую обращаться к бинарной матрице. Вы можете получить доступ к матрице только через интерфейс BinaryMatrix:
- BinaryMatrix.get(row, col) возвращает элемент матрицы с индексом (row, col) (начиная с 0).
- BinaryMatrix.dimensions() возвращает размеры матрицы в виде списка из 2 элементов [rows, cols], что означает, что матрица имеет размер rows x cols.
Отправки, делающие более 1000 вызовов к BinaryMatrix.get, будут оценены как неправильный ответ. Кроме того, любые решения, пытающиеся обойти проверку, будут дисквалифицированы.
Для пользовательского тестирования вводом будет вся бинарная матрица mat. Вы не будете иметь прямого доступа к бинарной матрице.
Пример:
Input: mat = [[0,0],[0,1]] Output: 1👨💻 Алгоритм: 1⃣Инициализируйте указатели на текущую строку и столбец, начиная с верхнего правого угла матрицы. 2⃣Повторяйте поиск до тех пор, пока указатели не выйдут за границы матрицы: Если текущий элемент равен 0, сдвигайте указатель строки вниз. Если текущий элемент равен 1, сдвигайте указатель столбца влево. 3⃣Если указатель столбца остается на последнем столбце, значит, все элементы матрицы равны 0, и верните -1. В противном случае верните индекс самого левого столбца с 1. 😎 Решение:
class Solution {
public int leftMostColumnWithOne(BinaryMatrix binaryMatrix) {
int rows = binaryMatrix.dimensions().get(0);
int cols = binaryMatrix.dimensions().get(1);
int currentRow = 0;
int currentCol = cols - 1;
while (currentRow < rows && currentCol >= 0) {
if (binaryMatrix.get(currentRow, currentCol) == 0) {
currentRow++;
} else {
currentCol--;
}
}
return (currentCol == cols - 1) ? -1 : currentCol + 1;
}
}
Ставь 👍 и забирай 📚 Базу знаний6 660
50 ГБ и безлимит за 290 ₽ с подпиской Pro
Хотите не считать минуты и гигабайты? Теперь это просто. В Т-Мобайле появился тариф, с которым хватит на всё.
С подпиской Pro он стоит 290 ₽ в месяц. Внутри — 50 ГБ интернета и безлимитные звонки на любые номера по России. Нет подписки? Подарим ее на 2 месяца бесплатно.
Подключитесь до 30 ноября и будьте на связи.
Узнать больше
#реклама
tbank.ru
О рекламодателе
6 660
Задача: 526. Beautiful Arrangement
Сложность: medium
Предположим, у вас есть n целых чисел, пронумерованных от 1 до n. Перестановка этих n целых чисел perm (нумерация с 1) считается красивой, если для каждого i (1 <= i <= n) выполняется одно из следующих условий:
perm[i] делится на i.
i делится на perm[i].
Дано целое число n, верните количество красивых перестановок, которые вы можете создать.
Пример:
Input: n = 2
Output: 2
Explanation:
The first beautiful arrangement is [1,2]:
- perm[1] = 1 is divisible by i = 1
- perm[2] = 2 is divisible by i = 2
The second beautiful arrangement is [2,1]:
- perm[1] = 2 is divisible by i = 1
- i = 2 is divisible by perm[2] = 1
👨💻 Алгоритм:
1⃣ Инициализация и подготовка массива:
Создайте массив чисел от 1 до N и инициализируйте счетчик красивых перестановок.
Создайте функцию для перестановки элементов массива.
2⃣ Рекурсивное создание перестановок и проверка условий:
Напишите рекурсивную функцию для создания всех возможных перестановок массива, начиная с текущей позиции l.
На каждом шаге перестановки проверяйте, удовлетворяет ли текущий элемент условиям делимости. Если условие выполняется, продолжайте создание перестановок рекурсивно для следующей позиции.
3⃣ Возврат результата:
В основной функции вызовите рекурсивную функцию с начальной позицией 0 и верните значение счетчика красивых перестановок.
😎 Решение:
public class Solution {
int count = 0;
public int countArrangement(int N) {
int[] nums = new int[N];
for (int i = 1; i <= N; i++)
nums[i - 1] = i;
permute(nums, 0);
return count;
}
public void permute(int[] nums, int l) {
if (l == nums.length) {
count++;
}
for (int i = l; i < nums.length; i++) {
swap(nums, i, l);
if (nums[l] % (l + 1) == 0 || (l + 1) % nums[l] == 0)
permute(nums, l + 1);
swap(nums, i, l);
}
}
public void swap(int[] nums, int x, int y) {
int temp = nums[x];
nums[x] = nums[y];
nums[y] = temp;
}
}
Ставь 👍 и забирай 📚 Базу знаний6 660
Гайд для РОПов по проведению эффективных вебинаров
Как руководителям отделов продаж увеличить количество успешных сделок при том же объеме лидов с помощью вебинаров?
Гайд от МТС Линк по обучающим вебинарам для отделов продаж.
✅ В гайде:
- Как эффективнее прокачивать скиллы менеджеров и закрывать больше сделок за меньшие сроки;
- Как организовать тренинг так, чтобы участники действительно подключились и дошли до финального модуля;
- Как выявить слабого менеджера и улучшить его показатели;
- Как сэкономить время на организации вебинара и пригласить всех участников в 2 клика.
Бонус внутри: 5 прикладных советов по контролю внимания участников во время вебинара
✨ Скачайте гайд бесплатно по ссылке
Скачать
#реклама 16+
mts-link.ru
О рекламодателе
6 660
Задача: 956. Tallest Billboard
Сложность: hard
Вы устанавливаете рекламный щит и хотите, чтобы он имел наибольшую высоту. У рекламного щита будет две стальные опоры, по одной с каждой стороны. Каждая стальная опора должна быть одинаковой высоты. Вам дается набор стержней, которые можно сварить вместе. Например, если у вас есть стержни длиной 1, 2 и 3, вы можете сварить их вместе, чтобы получилась опора длиной 6. Верните наибольшую возможную высоту вашей рекламной установки. Если вы не можете установить рекламный щит, верните 0.
Пример:
Input: rods = [1,2,3,6] Output: 6👨💻 Алгоритм: 1⃣Определить количество строк n и длину каждой строки m. Создать массив delete_count длиной m, который будет отслеживать количество удаляемых столбцов. 2⃣Итеративно проверить каждую пару соседних строк для всех столбцов. Если для данной пары строк обнаружено нарушение лексикографического порядка, отметить соответствующий столбец для удаления. 3⃣Повторять процесс до тех пор, пока массив строк не станет лексикографически отсортированным. Вернуть количество удаленных столбцов. 😎 Решение:
class Solution {
public int minDeletionSize(String[] strs) {
int n = strs.length;
int m = strs[0].length();
boolean[] deleteCount = new boolean[m];
while (!isSorted(strs, deleteCount)) {
for (int j = 0; j < m; j++) {
if (deleteCount[j]) continue;
for (int i = 0; i < n - 1; i++) {
if (strs[i].charAt(j) > strs[i + 1].charAt(j)) {
deleteCount[j] = true;
break;
}
}
if (deleteCount[j]) break;
}
}
int count = 0;
for (boolean del : deleteCount) {
if (del) count++;
}
return count;
}
private boolean isSorted(String[] strs, boolean[] deleteCount) {
int n = strs.length;
int m = deleteCount.length;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < m; j++) {
if (deleteCount[j]) continue;
if (strs[i].charAt(j) > strs[i + 1].charAt(j)) return false;
if (strs[i].charAt(j) < strs[i + 1].charAt(j)) break;
}
}
return true;
}
}
Ставь 👍 и забирай 📚 Базу знаний6 660
Квартиры в Новостройке СПб. Колпино. Ипотека 8% Сбербанк
Жилой комплекс "Квартал Заречье"
Санкт-Петербург. Колпино.
4 девятиэтажных жилых корпуса
8-этажный крытый гараж на 496 парковочных мест
В живописном месте у реки Ижора.
На первых этажах будут размещены магазины, кофейни, поликлиника и зона коворкинга.
Перейти на сайт
Изучите все условия кредита (займа) на сайте в соответствующем разделе. Оценивайте свои финансовые возможности и риски. Проектная декларация на сайте https://наш.дом.рф/. Застройщик: ООО "СЗ "ЗАГОРОДНАЯ, 71". Финансовые услуги оказывает: ПАО Сбербанк.
#реклама
квартал-заречье.рф
О рекламодателе
6 660
Repost from Идущий к IT
🔥 Записал видос "Как за 3 минуты настроить Автоотклики на вакансии HeadHunter" больше не придется заниматься этой унылой рутиной
📺 Видео: https://youtu.be/G_FOwEGPwlw
6 660
Задача: 972. Equal Rational Numbers
Сложность: hard
Даны две строки s и t, каждая из которых представляет собой неотрицательное рациональное число. Вернуть true тогда и только тогда, когда они представляют одно и то же число. Строки могут использовать скобки для обозначения повторяющейся части рационального числа.
Рациональное число может быть представлено с использованием до трех частей: <ЦелаяЧасть>, <НеповторяющаясяЧасть> и <ПовторяющаясяЧасть>. Число будет представлено одним из следующих трех способов:
<ЦелаяЧасть>
Например, 12, 0 и 123.
<ЦелаяЧасть><.><НеповторяющаясяЧасть>
Например, 0.5, 1., 2.12 и 123.0001.
<ЦелаяЧасть><.><НеповторяющаясяЧасть><(><ПовторяющаясяЧасть><)>
Например, 0.1(6), 1.(9), 123.00(1212).
Повторяющаяся часть десятичного разложения обозначается в круглых скобках. Например:
1/6 = 0.16666666... = 0.1(6) = 0.1666(6) = 0.166(66).
Пример:
Input: s = "0.(52)", t = "0.5(25)" Output: true Explanation: Because "0.(52)" represents 0.52525252..., and "0.5(25)" represents 0.52525252525..... , the strings represent the same number.👨💻 Алгоритм: 1⃣Преобразование дроби. Определите и изолируйте повторяющуюся часть дроби. Преобразуйте строку, представляющую число, в выражение вида S=x/(10^k-1), где x — повторяющаяся часть, а k — её длина. 2⃣Вычисление геометрической суммы. Преобразуйте повторяющуюся часть в сумму вида S=x*(r/(1-r)), где r = 10^(-k). Найдите значение дроби для повторяющейся части, используя формулу геометрической прогрессии. 3⃣Обработка неповторяющейся части. Определите значение неповторяющейся части дроби как обычное число. Объедините результаты для повторяющейся и неповторяющейся частей для получения итогового значения. 😎 Решение:
class Solution {
public boolean isRationalEqual(String S, String T) {
Fraction f1 = convert(S);
Fraction f2 = convert(T);
return f1.n == f2.n && f1.d == f2.d;
}
public Fraction convert(String S) {
int state = 0;
Fraction ans = new Fraction(0, 1);
int decimal_size = 0;
for (String part: S.split("[.()]")) {
state++;
if (part.isEmpty()) continue;
long x = Long.valueOf(part);
int sz = part.length();
if (state == 1) {
ans.iadd(new Fraction(x, 1));
} else if (state == 2) {
ans.iadd(new Fraction(x, (long) Math.pow(10, sz)));
decimal_size = sz;
} else {
long denom = (long) Math.pow(10, decimal_size);
denom *= (long) (Math.pow(10, sz) - 1);
ans.iadd(new Fraction(x, denom));
}
}
return ans;
}
}
class Fraction {
long n, d;
Fraction(long n, long d) {
long g = gcd(n, d);
this.n = n / g;
this.d = d / g;
}
public void iadd(Fraction other) {
long numerator = this.n * other.d + this.d * other.n;
long denominator = this.d * other.d;
long g = Fraction.gcd(numerator, denominator);
this.n = numerator / g;
this.d = denominator / g;
}
static long gcd(long x, long y) {
return x != 0 ? gcd(y % x, x) : y;
}
}
Ставь 👍 и забирай 📚 Базу знаний6 660
Задача: 1238. Circular Permutation in Binary Representation
Сложность: medium
Даны 2 целых числа n и start. Ваша задача - вернуть любую перестановку p из (0,1,2.....,2^n -1) такую, что : p[0] = start p[i] и p[i+1] отличаются только одним битом в их двоичном представлении. p[0] и p[2^n -1] также должны отличаться только одним битом в их двоичном представлении.
Пример:
Input: n = 2, start = 3 Output: [3,2,0,1]👨💻 Алгоритм: 1⃣Генерация Грей-кода: Генерация Грей-кода для чисел от 0 до 2𝑛−1 2⃣Определение начальной позиции: Находим индекс числа start в последовательности Грей-кода. 3⃣Построение перестановки: Формируем перестановку, начиная с числа start и следуя по циклическому Грей-коду. 😎 Решение:
import java.util.*;
public class Solution {
public List<Integer> circularPermutation(int n, int start) {
List<Integer> gray = grayCode(n);
int startIndex = gray.indexOf(start);
List<Integer> result = new ArrayList<>();
result.addAll(gray.subList(startIndex, gray.size()));
result.addAll(gray.subList(0, startIndex));
return result;
}
private List<Integer> grayCode(int n) {
List<Integer> result = new ArrayList<>();
int numElements = 1 << n;
for (int i = 0; i < numElements; i++) {
result.add(i ^ (i >> 1));
}
return result;
}
}
Ставь 👍 и забирай 📚 Базу знаний6 660
Задача: №19. Remove Nth Node From End of List
Сложность: medium
Учитывая заголовок связанного списка, удалите
n-й узел с конца списка и верните его заголовок.
Пример:
Input: head = [1,2,3,4,5], n = 2 Output: [1,2,3,5]👨💻 Алгоритм: 1⃣Создать фиктивный узел
dummy, указывающий на head, чтобы удобно было обрабатывать крайние случаи (например, удаление головы).
2⃣Инициализировать два указателя fast и slow, оба на dummy. Сначала сдвинуть fast на n шагов вперёд.
3⃣Затем двигать оба указателя, пока fast.next не станет null. Теперь slow находится перед узлом, который нужно удалить.
😎 Решение:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy = new ListNode(0, head);
ListNode fast = dummy;
ListNode slow = dummy;
for (int i = 0; i < n; i++) {
fast = fast.next;
}
while (fast.next != null) {
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return dummy.next;
}
}
Ставь 👍 и забирай 📚 Базу знаний6 660
Задача: 407. Trapping Rain Water II
Сложность: hard
Задав целочисленную матрицу heightMap размером m x n, представляющую высоту каждой ячейки на двумерной карте рельефа, верните объем воды, который она может задержать после дождя.
Пример:
Input: heightMap = [[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3,2,3,1]] Output: 4👨💻 Алгоритм: 1⃣Используйте приоритетную очередь для хранения всех ячеек по периметру матрицы. 2⃣Постепенно извлекайте ячейки из очереди, рассматривая их соседей. Если соседняя ячейка ниже текущей, добавьте разницу в высоте к общему объему воды и обновите её высоту. 3⃣Повторите процесс, пока все ячейки не будут обработаны. 😎 Решение:
import java.util.PriorityQueue;
public class Solution {
public int trapRainWater(int[][] heightMap) {
if (heightMap.length == 0 || heightMap[0].length == 0) return 0;
int m = heightMap.length, n = heightMap[0].length;
boolean[][] visited = new boolean[m][n];
PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> a[0] - b[0]);
for (int i = 0; i < m; i++) {
for (int j : new int[]{0, n-1}) {
pq.offer(new int[]{heightMap[i][j], i, j});
visited[i][j] = true;
}
}
for (int j = 0; j < n; j++) {
for (int i : new int[]{0, m-1}) {
pq.offer(new int[]{heightMap[i][j], i, j});
visited[i][j] = true;
}
}
int[][] directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
int water = 0;
while (!pq.isEmpty()) {
int[] cell = pq.poll();
for (int[] dir : directions) {
int nx = cell[1] + dir[0], ny = cell[2] + dir[1];
if (nx >= 0 && nx < m && ny >= 0 && ny < n && !visited[nx][ny]) {
visited[nx][ny] = true;
water += Math.max(0, cell[0] - heightMap[nx][ny]);
pq.offer(new int[]{Math.max(cell[0], heightMap[nx][ny]), nx, ny});
}
}
}
return water;
}
}
Ставь 👍 и забирай 📚 Базу знаний6 660
Задача: 245. Shortest Word Distance II
Сложность: medium
Дан массив строк wordsDict и две строки word1 и word2, которые уже существуют в массиве. Верните наименьшее расстояние между вхождениями этих двух слов в списке.
Обратите внимание, что word1 и word2 могут быть одинаковыми. Гарантируется, что они представляют собой два отдельных слова в списке.
Пример:
Input: wordsDict = ["practice", "makes", "perfect", "coding", "makes"], word1 = "makes", word2 = "coding" Output: 1👨💻 Алгоритм: 1⃣Переберите список wordsDict и сохраните индексы слова word1 в список indices1 и индексы слова word2 в список indices2. Инициализируйте переменную shortestDistance = INT_MAX. 2⃣Переберите индексы в списке indices1 и для каждого индекса найдите верхнюю границу в списке indices2, используя бинарный поиск, и сохраните этот индекс в переменную x. Рассмотрите индексы indices2[x] и indices2[x - 1], обновляя shortestDistance, если индексы не совпадают. 3⃣Верните значение переменной shortestDistance. 😎 Решение:
import java.util.*;
class Solution {
public int shortestWordDistance(String[] wordsDict, String word1, String word2) {
List<Integer> indices1 = new ArrayList<>();
List<Integer> indices2 = new ArrayList<>();
for (int i = 0; i < wordsDict.length; i++) {
if (wordsDict[i].equals(word1)) {
indices1.add(i);
}
if (wordsDict[i].equals(word2)) {
indices2.add(i);
}
}
int shortestDistance = Integer.MAX_VALUE;
for (int index : indices1) {
int x = Collections.binarySearch(indices2, index);
if (x < 0) {
x = -x - 1;
}
if (x < indices2.size()) {
shortestDistance = Math.min(shortestDistance, indices2.get(x) - index);
}
if (x > 0 && !indices2.get(x - 1).equals(index)) {
shortestDistance = Math.min(shortestDistance, index - indices2.get(x - 1));
}
}
return shortestDistance;
}
}
Ставь 👍 и забирай 📚 Базу знаний6 660
Магистратура — это 2 года жизни и серьезные вложения
Как не ошибиться с выбором?
Приходите на день открытых дверей ИТ-магистратуры Центрального университета — разберем все важные вопросы, которые помогут принять правильное решение.
О чем будем говорить:
-Как создаются программы магистратуры в ЦУ, что такое продуктовый подход в высшем образовании и как это делает выпускников реально востребованными на рынке
-Как университет помогает студентам строить карьеру: от менторства до трудоустройства в топовые компании
-Какие направления есть в ЦУ и как выбрать то, что приведет к вашим карьерным целям
-Реальные истории студентов: как они поступали, учились и куда пошли работать
Спикеры — практики с опытом в Google, Яндексе, Т-Банке и Visa, которые сейчас отвечают за образовательный опыт студентов ЦУ.
Зарегистрироваться
#реклама 16+
r.bothelp.io
О рекламодателе
6 660
Задача: 372. Super Pow
Сложность: medium
Ваша задача — вычислить а^b mod 1337, где a - положительное число, а b - чрезвычайно большое положительное целое число, заданное в виде массива.
Пример:
Input: a = 2, b = [3] Output: 8👨💻 Алгоритм: 1⃣Разделите задачу на более мелкие задачи: вычислите a^b mod 1337, используя свойства модульной арифметики и степенной функции. Разделите большой показатель b на меньшие части, чтобы обрабатывать их по очереди. 2⃣Используйте метод быстрого возведения в степень (pow) для эффективного вычисления больших степеней с модулем 1337. 3⃣Объедините результаты для каждой части показателя b, используя свойства модульной арифметики: (a^b) % 1337 = ((a^(b1)) % 1337 * (a^(b2)) % 1337 * ...) % 1337. 😎 Решение:
public class Solution {
public int getSum(int a, int b) {
int x = Math.abs(a), y = Math.abs(b);
if (x < y) return getSum(b, a);
int sign = a > 0 ? 1 : -1;
if (a * b >= 0) {
while (y != 0) {
int carry = (x & y) << 1;
x ^= y;
y = carry;
}
} else {
while (y != 0) {
int borrow = ((~x) & y) << 1;
x ^= y;
y = borrow;
}
}
return x * sign;
}
}
Ставь 👍 и забирай 📚 Базу знаний6 660
Реклама для бизнеса любого уровня в Яндекс Директе
Создайте эффективную рекламную кампанию с алгоритмами Яндекс Директа 👌
Начните прямо сейчас ⚡
Зарегистрироваться
#реклама
direct.yandex.ru
О рекламодателе
6 660
#medium
Задача: 714. Best Time to Buy and Sell Stock with Transaction Fee
Сложность: medium
Вам дан массив prices, где prices[i] - это цена данной акции в i-й день, и целое число fee, представляющее собой комиссию за сделку. Найдите максимальную прибыль, которую вы можете получить. Вы можете совершить сколько угодно сделок, но за каждую сделку вам придется заплатить комиссию. Примечание: Вы не можете совершать несколько сделок одновременно (то есть вы должны продать акции, прежде чем купить их снова). Комиссия за сделку взимается только один раз за каждую покупку и продажу акций.
Пример:
Input: prices = [1,3,2,8,4,9], fee = 2 Output: 8👨💻 Алгоритм: 1⃣Инициализируйте две переменные: cash, представляющую максимальную прибыль без наличия акций, и hold, представляющую максимальную прибыль с наличием акций. 2⃣Пройдите по каждому элементу массива prices и обновите значения cash и hold, используя текущую цену и комиссию. 3⃣Верните значение cash, которое будет максимальной прибылью без наличия акций. 😎 Решение:
public class Solution {
public int maxProfit(int[] prices, int fee) {
int cash = 0, hold = -prices[0];
for (int price : prices) {
cash = Math.max(cash, hold + price - fee);
hold = Math.max(hold, cash - price);
}
return cash;
}
}
Ставь 👍 и забирай 📚 Базу знаний6 660
Битрикс24 показал, каким будет будущее бизнеса
Автоматизация с ИИ, больше эмоций, высокая скорость коммуникаций.
✨Теперь задачи можно ставить голосовым сообщением или записывать кружком, ИИ сам все оформит и назначит исполнителя.
😊В чатах – 40+ реакций, стикеры и даже распознавание эмоций в расшифровке голосовых. У каждого появится свой ИИ-агент, который может выполнять сложные поручения даже с внешними сервисами вроде 1С или почты.
📱В CRM нейросеть сама заполняет сделки, отсекает пустые звонки и ищет клиентов для повторных продаж. А BitrixGPT теперь можно тегнуть прямо в чате – подведет итоги и найдет нужное за секунду.
Большинство новинок уже можно протестировать в Битрикс24
Зарегистрироваться
#реклама 16+
space-release.bitrix24.ru
О рекламодателе
6 660
Задача: 1256. Encode Number
Сложность: medium
Даны список слов, список отдельных букв (могут повторяться) и оценка каждого символа. Верните максимальную оценку любого правильного набора слов, образованного с помощью заданных букв (words[i] не может быть использовано два или более раз). Не обязательно использовать все символы в буквах, каждая буква может быть использована только один раз. Оценка букв 'a', 'b', 'c', ... , 'z' задаются значениями score[0], score[1], ... , score[25] соответственно.
Пример:
Input: num = 23 Output: "1000"👨💻 Алгоритм: 1⃣На основе предоставленной таблицы можно выявить закономерность для преобразования целого числа n в строку f(n) 2⃣Из таблицы видно, что последовательность строк соответствует последовательности чисел в двоичной системе счисления за исключением начального значения n = 0. 3⃣Таким образом, можно вывести, что: Для каждого значения n > 0, функция f(n) представляет собой двоичное представление числа (n - 1). 😎 Решение:
public class Solution {
public String encode(int num) {
if (num == 0) return "";
return Integer.toBinaryString(num - 1);
}
}
Ставь 👍 и забирай 📚 Базу знаний6 660
Запустите рекламу в телеграм-каналах с Яндекс Директом
Перфоманс-реклама теперь в телеграм-каналах ⚡
Яндекс Директ знает, как привлечь целевую аудиторию 💰👌
Попробовать
#реклама
yandex.ru
О рекламодателе
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
