Сообщения

Сообщения за май, 2020

Проверить идентичность деревьев

Даны два бинарных дерева, написать функцию, которая проверяет, идентичны ли они. Два бинарных дерева идентичны, если у них одинаковая структура и на узлах в идентичных позициях храняться одинаковые значения. Пример 1: Дано: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3] Результат: true Пример 2: Дано : 1 1 / \ 2 2 [1,2], [1,null,2] Результат : false Пример 3: Дано : 1 1 / \ / \ 2 1 1 2 [1,2,1], [1,1,2] Результат : false Идея решения Дерево А идентично дереву Б, если значения в корнях совпадают, а также идентичны левые и правые поддревья, для которых мы можем опять проверить корни и левые/правые поддеревья и так далее. Очевидно, для решения нам понадобится рекурси. Имплементация     public boolean isSameTree(TreeNode p, TreeNode q) {         if (...

Сложить два числа, которые представлены списком

Даны 2 непустых списка, в которых закодированы, соответственно, два неотрицательных чила. Цифры каждого числа хранятся в обратном порядке. В каждоя ячейке списка находится одна цифра. Сложить эти два числа и вернуть их в виде списка. Можно предположить, что заданные числа не начинаются с нуля, за исключением если они и есть 0. Пример: Дано: (2 -> 4 -> 3) + (5 -> 6 -> 4) Резальтат: 7 -> 0 -> 8 Пояснение: 342 + 465 = 807. Идея решения. В начале каждого списка установим указатель, они будут смещаться одновременно складывая числа ячеек: a+b по правилам сложения в столбик. Имплементация. public ListNode addTwoNumbers(ListNode l1, ListNode l2) {     ListNode dummyHead = new ListNode(0); // запоминаем начало результирующего списка     ListNode p = l1, q = l2, curr = dummyHead;     int carry = 0;     while (p != null || q != null) {         int x = (p != null) ? p.v...

Волшебный словарь

Нужно создать структуру "волшебный" словарь с методами buildDict и search . Для метода buildDict будет дан список неповторящихся слов, которые будут использованы для создания словаря. Для метода search будет дано одно слово, оно может совпадать с каким-то словом из словаря или отличаться от слова в словаре на одну букву . Пример: Input: buildDict(["hello", "leetcode"]), Output: Null Input: search("hello"), Output: False Input: search("hhllo"), Output: True Input: search("hell"), Output: False Input: search("leetcoded"), Output: False Примечания: Мы предполагаем, что все слова в словаре написаны маленькими буквами английского алфавита a-z . Словарь может быть очень большим. Идея решения В процессе инициализации словаря мы можем рассортировать слова по "ведрам" (buckets), где каждое ведро содержит слова определенной длины. Когда поступает слово на поиск, мы берем список слов той же...