{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Misc" ] }, { "attachments": { "5852f831-e098-4d93-ba24-d9db7656a33b.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "## [257. Binary Tree Paths](https://leetcode.com/problems/binary-tree-paths/)\n", "\n", "Easy\n", "\n", "Given the root of a binary tree, return all root-to-leaf paths in any order.\n", "\n", "A leaf is a node with no children.\n", "\n", "Example 1:\n", "\n", "![image257.png](attachment:5852f831-e098-4d93-ba24-d9db7656a33b.png)\n", "\n", " Input: root = [1,2,3,null,5]\n", " Output: [\"1->2->5\",\"1->3\"]\n", " \n", "Constraints:\n", "\n", " The number of nodes in the tree is in the range [1, 100].\n", " -100 <= Node.val <= 100" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# recursive\n", "\n", "isLeaf = lambda root: root.val and root.left == root.right == None\n", "\n", "def binaryTreePaths(root):\n", " if not root: \n", " return []\n", " elif isLeaf(root):\n", " return [str(root.val)]\n", " else: \n", " return [f'{root.val}->{path}' for path in self.binaryTreePaths(root.left) + self.binaryTreePaths(root.right)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 171. Excel Sheet Column Number\n", "\n", "Easy\n", "\n", "Given a column title as appear in an Excel sheet, return its corresponding column number.\n", "\n", "For example:\n", "\n", " A -> 1\n", " B -> 2\n", " C -> 3\n", " ...\n", " Z -> 26\n", " AA -> 27\n", " AB -> 28 \n", " ...\n", "\n", "Example 1:\n", "\n", " Input: \"AB\"\n", " Output: 28\n", " \n", "\n", "Constraints:\n", "\n", " 1 <= s.length <= 7\n", " s consists only of uppercase English letters.\n", " s is between \"A\" and \"FXSHRXW\"." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "702" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import string\n", "\n", "def titleToNumber(s):\n", " digit = dict(zip(string.ascii_uppercase, range(1, 27)))\n", " res = 0\n", " for c in s:\n", " res = 26*res + digit[c]\n", " \n", " return res\n", " \n", "titleToNumber('ZZ')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 22. Generate Parentheses\n", "\n", "Medium\n", "\n", "Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.\n", "\n", "Example 1:\n", "\n", " Input: n = 3\n", " Output: [\"((()))\",\"(()())\",\"(())()\",\"()(())\",\"()()()\"]\n", " \n", "Constraints:\n", "\n", " 1 <= n <= 8" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['((()))', '(()())', '(())()', '()(())', '()()()']" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# https://en.wikipedia.org/wiki/Catalan_number#Applications_in_combinatorics\n", "# 同:從方格圖的左下走到右上,不能走超過反對角線有幾種走法。往右走是加 '(',往上走是加 ')'\n", "#\n", "# addOnePair example: \n", "# comb = \"((()))\"\n", "# 從右邊數來有 3 個連續的 ')', 把 ')))' 替換成 '())))', ')()))', '))())' 或 ')))()'\n", "\n", "# 也可以用 backtracking\n", "\n", "import functools\n", "\n", "@functools.lru_cache(maxsize=None)\n", "def generateParenthesis(n):\n", " if n==1:\n", " return ['()']\n", " else:\n", " return sum([addOnePair(comb) for comb in generateParenthesis(n-1)], [])\n", "\n", "def addOnePair(comb):\n", " comb = list(comb)\n", "\n", " n_right = 0\n", " while comb[-1] == ')': \n", " n_right += 1\n", " comb.pop()\n", "\n", " return [''.join(comb) + ')'*i + '(' + ')'*(n_right-i+1) for i in range(n_right + 1)]\n", "\n", "\n", "generateParenthesis(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 206. Reverse Linked List\n", "Easy\n", "\n", "Reverse a singly linked list.\n", "\n", "Example:\n", "\n", " Input: 1->2->3->4->5->NULL\n", " Output: 5->4->3->2->1->NULL\n", "\n", "Follow up:\n", "\n", "A linked list can be reversed either iteratively or recursively. Could you implement both?\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 2, 3, 4, 5]\n", "[5, 4, 3, 2, 1]\n" ] } ], "source": [ "class ListNode:\n", " def __init__(self, val=0, next=None): \n", " self.val = val\n", " self.next = next\n", " \n", "def reverseList_(head): # recursive solution from LeetCode\n", " if head is None or head.next is None:\n", " return head\n", " else:\n", " res = reverseList(head.next)\n", " head.next.next = head\n", " head.next = None\n", " return res\n", "\n", "def reverseList(head): # iterative\n", " res = None\n", " while head:\n", " res = ListNode(val=head.val, next=res)\n", " head = head.next\n", " \n", " return res\n", "\n", "def list2arr(head):\n", " res = []\n", " while head:\n", " res.append(head.val)\n", " head = head.next\n", " return res\n", "\n", "head = ListNode(val=1, \n", " next=ListNode(val=2, \n", " next=ListNode(val=3, \n", " next=ListNode(val=4, \n", " next=ListNode(val=5, next=None)))))\n", "\n", "print(list2arr(head))\n", "print(list2arr(reverseList(head)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 46. Permutations\n", "Medium\n", "\n", "Given an array nums of distinct integers, return all the possible permutations. You can return the answer in any order.\n", "\n", "Example 1:\n", "\n", " Input: nums = [1,2,3]\n", " Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]\n", "\n", "Constraints:\n", "\n", " 1 <= nums.length <= 6\n", " -10 <= nums[i] <= 10\n", " All the integers of nums are unique." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nums = [1, 2, 3]\n", "\n", "def permute(nums):\n", " '''\n", " assuming no duplicates in the input list\n", " '''\n", " if not nums:\n", " return [nums]\n", " else:\n", " res = []\n", " for i, n in enumerate(nums):\n", " for l in permute(nums[:i] + nums[i+1:]):\n", " res.append([n]+l)\n", " return res\n", "\n", "permute(nums)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nums = [1, 2, 3]\n", "\n", "def permute(nums):\n", " '''\n", " assuming no duplicates in the input list\n", " '''\n", " if not nums:\n", " return [[]]\n", " else:\n", " return [[n]+l for i, n in enumerate(nums) for l in permute(nums[:i] + nums[i+1:])]\n", " \n", "permute(nums)" ] }, { "attachments": { "a420e5b8-0eb0-4886-8129-1820a221360f.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "## 144. Binary Tree Preorder Traversal\n", "\n", "Medium\n", "\n", "Given the root of a binary tree, return the preorder traversal of its nodes' values.\n", "\n", "Example 1:\n", "\n", "![image144.png](attachment:a420e5b8-0eb0-4886-8129-1820a221360f.png)\n", "\n", " Input: root = [1,null,2,3]\n", " Output: [1,2,3]\n", "\n", "Constraints:\n", "\n", " The number of nodes in the tree is in the range [0, 100].\n", " -100 <= Node.val <= 100" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# Definition for a binary tree node.\n", "# class TreeNode:\n", "# def __init__(self, val=0, left=None, right=None):\n", "# self.val = val\n", "# self.left = left\n", "# self.right = right\n", "\n", "def preorderTraversal(root):\n", " if not root:\n", " return []\n", " else:\n", " return [root.val] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 226. Invert Binary Tree\n", "\n", "Easy\n", "\n", "Invert a binary tree.\n", "\n", "Example:\n", "\n", "Input:\n", "\n", " 4\n", " / \\\n", " 2 7\n", " / \\ / \\\n", " 1 3 6 9\n", "\n", "Output:\n", "\n", " 4\n", " / \\\n", " 7 2\n", " / \\ / \\\n", " 9 6 3 1\n", "\n", "Trivia:\n", "This problem was inspired by this original tweet by Max Howell:\n", "\n", " Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so f*** off.\n", "\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# Definition for a binary tree node.\n", "# class TreeNode:\n", "# def __init__(self, val=0, left=None, right=None):\n", "# self.val = val\n", "# self.left = left\n", "# self.right = right\n", "\n", "def invertTree(root):\n", " if root:\n", " root.left, root.right = invertTree(root.right), invertTree(root.left)\n", " return root" ] }, { "attachments": { "b59fd9ea-804e-4874-ac4b-e0455459413f.png": { "image/png": "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/37rHAARJjYuJQDgnBYvXqwLLrhAK1eutE4Jq1gZDd9ZuXKlLrjgAi1evNg6BUAEia1LCQA4ze7du/XTn/5UP//5z/X3v//dOifsYm00SNLf//53/fznP9dPf/pT7d692zoHQASIvUsJAJAkNTQ0KDc3V3369NEzzzxjnWMmFkfDd5555hn16dNHubm5amhosM4B4GCxeykBIIZt3bpViYmJuvvuu/X5559b55iK5dEgSZ9//rnuvvtuJSYmauvWrdY5ABwqti8lAMSYY8eO6c4779TgwYP1hz/8wTrHEWJ9NHznD3/4gwYPHqw777xTx44ds84B4DBcSgCIEevWrVPv3r310EMPqbGx0TrHMRgN/9XY2KiHHnpI//M//6N169ZZ5wBwEC4lAES5d999V5MmTdLIkSP15z//2TrHcRgNp/vzn/+skSNHatKkSXr33XetcwA4AJcSAKLYihUr1KlTJ/3617+2TnEsRsPZ/frXv1anTp20YsUK6xQAxriUABCF9u3bpzFjxmjcuHF68803rXMcjdHQvDfffFM/+9nPNGbMGO3bt886B4ARLiUARJmCggJ16dJFq1atsk6JCIyGllm1apW6dOmigoIC6xQABriUABAldu3apeHDh2vq1Kn68MMPrXMiBqOh5T788ENlZWVp+PDh2rVrl3UOgDDiUgJAhPvmm2/0wAMP6NJLL1VZWZl1TsRhNLReWVmZLr30Uj3wwAP65ptvrHMAhAGXEgAi2JYtWzRw4EDNnj1b//rXv6xzIhKjoW3+9a9/adasWRo4cKC2bNlinQMgxLiUABCBPv30U91xxx0aMmSIfD6fdU5EYzS0j8/n05AhQ3THHXfo008/tc4BECJcSgCIMGvWrFHPnj01f/5865SowGgIjvnz56tnz55as2aNdQqAEOBSAkCEePvtt+XxeJSWlqa9e/da50QNRkPwvPrqq0pLS5PH49Hbb79tnQMgiLiUABABli1bpvPOO09LliyxTok6jIbgW7Jkic477zwtW7bMOgVAkHApAcDB3njjDaWnp2v8+PE6ePCgdU5UYjSExl//+leNHz9e6enpeuONN6xzALQTlxIAHGrhwoXq1q2bnn76aeuUqMZoCK2nn35a3bp108KFC61TALQDlxIAHGbHjh26+uqrNW3aNB0+fNg6J+oxGkLv8OHDmjZtmq6++mr9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GMA7ZgBnx2gATsU76eFMuJRAlCsvL+e9uYFmMBqA0/HMHvwQlxKIUkePHtXMmTN5CihwDowG4Oy2bdumK664QnfeeaeOHTtmnQNDXEogCq1du1a9e/dWXl6edQrgeIwG4Nzy8vLUu3dvrVu3zjoFRriUQBR55513NHHiRI0aNUp79uyxzgEiAqMBaJk9e/Zo1KhRmjRpkt59913rHIQZlxKIEsuXL1enTp1UWFhonQJEFEYD0DqFhYXq1KmTVqxYYZ2CMOJSAhGuurpao0eP1s0336z/9//+n3UOEHEYDUDrHThwQOPGjdPo0aO1b98+6xyEAZcSiGD5+fnq2rWrfve731mnABGL0QC03VNPPaWuXbsqPz/fOgUhxqUEItBLL72kYcOG6bbbbtNHH31knQNENEYD0D5+v1+33Xabhg0bppdeesk6ByHCpQQiyMmTJzV37lz17dtXzz77rHUOEBUYDUBwPPvss+rbt6/mzp2rkydPWucgyLiUQIR4/vnnNWDAAN1333366quvrHOAqMFoAILnq6++0n333acBAwbo+eeft85BEHEpAYc7cuSIZsyYoaFDh+rFF1+0zgGiDqMBCL4XX3xRQ4cO1YwZM3TkyBHrHAQBlxJwMK/Xqx49emjBggXWKUDUYjQAobNgwQL16NFDXq/XOgXtxKUEHOjQoUO69dZbde211+q1116zzgGiGqMBCK3XXntN1157rW699VYdOnTIOgdtxKUEHObxxx9Xhw4dtHTpUusUIGoVFBQ0/e/fHw3f/3EAwbV06VJ16NBBjz/+uHUK2oDRADhEZWWlrr/+et1yyy166623rHOAqDVr1izFxcUpJSVFFRUVcrlcqqioUEpKiuLi4jRr1izrRCBqvfXWW7rlllt0/fXXq7Ky0joHrcBoABzgkUceUffu3bV69WrrFCAmJCYmyuVyqUuXLqf8z8TEROs0ICasXr1a3bt31yOPPGKdghZiNACGduzYoauuukrTp0/Xxx9/bJ0DxIwNGzboRz/6kVwuV9NfP/rRj7RhwwbrNCBmfPzxx5o+fbquuuoq7dixwzoH58BoAAwcP35cc+bMUf/+/bV582brHCAmfffVhu/+4qsMgI3Nmzerf//+mjNnjo4fP26dg7NgNABhtmnTJl122WW6//77deLECescIGZ9/6sNfJUBsHXixAndf//9uuyy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duxoaO19YTRAkpSSkqLq6mrrjGa9/PLLuvjiix338qTq6mqlpKRYZwCOFQn3RZLeeOONphvjlK80cF+A5jnpvnz/ZY5FRUVqaGhw9Gho7X1hNECS1K9fP/n9fuuM0zQ2NuqTTz7Rb3/726ZvYlyyZIlj3t1Ekvx+v/r162edATiWU+/L9zn1exq4L0DznHRf/vd//1cJCQmnvGGLk0dDa+8LowGSpISEBMe9Xdkf/vCHU76J6OKLL9YzzzzjuGc1BAIBJSQkWGcAjuXE+/JD370G2eVy6be//a1j3j2J+wI0zyn35a233tLIkSOVlJSkN998s+nHnTwaWntfGA2QJHXs2FENDQ3WGad45plnTnsf9cGDB+vZZ5911FcaGhoa1LFjR+sMwLGceF++7/vPh3HaWzpzX4DmOeG+fP311/rFL34hl8ul3//+96f8oYOTR0Nr7wujAZIkl8t5/6/w9ddfq76+Xt9++63ee+89zZs3r2k8fPdaQadw4n9+gFM4+d+P1157rembn8ePH++oh0d+x8n/+QHWrP/9aGxs1O9//3u5XC794he/0Ndff33K33fyaJBa958flwiSnLHUz6W+vl6PPvqoXC6XkpKS9Ne//tU6SRJ/EgicixPvS2Njo1588cWmlyQ5dTBwX4DmWd+X6upq9e/fXyNHjtRbb7112t938mjgKw1oE6e8JvBc/vrXvyopKUkul0tlZWXWOZJ4zTFwLk67L/X19VqzZo0SEhKaXpJ0pgdKOgH3BWie5X355z//qYkTJyohIUEbN248489x8mjgexrQJk5694HmHDt2TD/72c/kcrm0ePFi6xxJvLsJcC5Oui9ff/1107skuVwu/fKXv3TUoPkh7gvQPMv78uqrr572vZct+cspf+jJuyehTazf53jHjh268cYblZGR0exLBP75z3/qxhtvdNQD3ngfdaB51vflO9//ZsWEhAQ98cQTjns3th/ivgDNs7wvkT4aeE4D2sT6iYr79u3TxRdfLJfLpZ07d57153338KVz/bxw4omtQPOs74t06mDo37+/nnvuOX377bemTS3BfQGa54T70hwnvzyJJ0KjTXJzc1VUVGT2+T///HNNnjy52bc8DAQCuvvuu+VyuXTrrbfq008/NSg9XVFRkXJzc60zAMeyvi+NjY0qLS1t+grDhg0bHPMchnPhvgDNs74v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wdANN9ygzZs3W2cgimzevFk33HCDdQYAAIgyjAYje/bs0eDBg60zEIUGDx6sPXv2WGcAAIAowmgwMm3aNC1fvtw6A1Fo+fLlmjZtmnUGAACIIowGA++99566du2q48ePW6cgCh0/flxdu3bVe++9Z50CAACiBKPBwMMPP6wHH3zQOgNR7MEHH9TDDz9snQEAAKIEoyHMTp48qe7du6uurs46BVGsrq5O3bt318mTJ61TAABAFGA0hNnKlSs1depU6wzEgKlTp2rlypXWGQAAIAowGsLsyiuv1O7du60zEAN2796tK6+80joDAABEBAg4cgAAExpJREFUAUZDGL3wwgu67rrrrDMQQ6677jq98MIL1hkAACDCMRrCaOzYsSorK7POQAwpKyvT2LFjrTMAAECEYzSESWVlpQYOHGidgRg0cOBAVVZWWmcAAIAIxmgIk5kzZ2rp0qXWGYhBS5cu1cyZM60zAABABGM0hMFHH32kuLg4ffnll9YpiEFffvml4uLi9NFHH1mnAACACMVoCIOFCxdq7ty51hmIYXPnztXChQutMwAAQIRiNIRYY2OjevfurYMHD1qnIIYdPHhQvXv3VmNjo3UKAACIQIyGECspKdGkSZOsMwBNmjRJJSUl1hkAACACMRpCzO12a+fOndYZgHbu3Cm3222dAQAAIhCjIYS2bdumkSNHWmcATUaOHKlt27ZZZwAAgAjDaAih8ePHa+3atdYZQJN169Zp/Pjx1hkAACDCMBpCpKamRn379rXOAE7Tt29f1dTUWGcAAIAIwmgIkXvvvVePPvqodQZwmkcffVT33nuvdQYAAIggjIYQOHLkiDp06KCjR49apwCnOXr0qDp06KAjR45YpwAAgAjBaAiBRYsWafbs2dYZwFnNnj1bixYtss4AAAARgtEQApdccon2799vnQGc1f79+3XJJZdYZwAAgAjBaAiyNWvWKDMz0zoDOKfMzEytWbPGOgMAAEQARkOQjRgxQj6fzzoDOCefz6cRI0ZYZwAAgAjAaAiiiooKDR8+3DoDaLHhw4eroqLCOgMAADhcxIyGqqoqeb1e5ebmyuPxKCUlRf369VNCQoI6duwol8uljh07KiEhQf369VNKSoo8Ho9yc3Pl9XpVVVUV8sYJEyZo9erVIf88QLCsXr1aEyZMCPnniYR/fwEAwNk5djTU1NSosLBQ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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "## 559. Maximum Depth of N-ary Tree\n", "\n", "Easy\n", "\n", "Given a n-ary tree, find its maximum depth.\n", "\n", "The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.\n", "\n", "Nary-Tree input serialization is represented in their level order traversal, each group of children is separated by the null value (See examples).\n", "\n", "Example 1:\n", "\n", "![image559.png](attachment:b59fd9ea-804e-4874-ac4b-e0455459413f.png)\n", "\n", " Input: root = [1,null,3,2,4,null,5,6]\n", " Output: 3 \n", "\n", "Constraints:\n", "\n", " The depth of the n-ary tree is less than or equal to 1000.\n", " The total number of nodes is between [0, 104]." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# recursive solution\n", "\n", "\"\"\"\n", "# Definition for a Node.\n", "class Node:\n", " def __init__(self, val=None, children=None):\n", " self.val = val\n", " self.children = children\n", "\"\"\"\n", "\n", "def maxDepth(root):\n", " if not root:\n", " return 0\n", " elif not root.children:\n", " return 1\n", " else:\n", " return 1 + max(maxDepth(node) for node in root.children)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# BFS solution stolen from LeetCode\n", "\n", "def maxDepth(root):\n", " if not root:\n", " return 0\n", "\n", " qu = [root]\n", " lv = 0\n", " while qu:\n", " for _ in range(len(qu)):\n", " cur = qu.pop(0)\n", " if cur.children:\n", " for ch in cur.children:\n", " qu.append(ch)\n", " lv+=1\n", " \n", " return lv" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.10" } }, "nbformat": 4, "nbformat_minor": 4 }