LeetCode

LeetCode

二分木の通りがけ順をMorris traversalで解く

二分木の値を通りがけ順に出力する問題。 再帰を使った深さ優先探索で解ける。 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0,...
LeetCode

784. Letter Case Permutation

英数字の文字列が与えられ、アルファベットを大文字小文字に変換した際の全パターンを列挙する問題。 数字は変換しないので、アルファベットかどうかで場合分けしながら効率的な全探索を考える。 再帰 文字列を先頭から1つずつ見ていき、アルファベットだ...
LeetCode

O(N)で567. Permutation in String

2つの文字列s1とs2が与えられ、s1の並び替えがs2に含まれるかどうか(s1の順列がs2の部分文字列か)判定する問題。 最初に思いついた解法 s1, s2 の長さをn1, n2とする。 s2から長さn1の文字列を切り出し、collecti...
LeetCode

5通りの方法で189. Rotate Arrayを解く

長さnの配列をk個右に回転させる問題。 There are at least three different ways to solve this problem.と書いてあったので、色々試してみた。 全探索 1個ずらす作業をk回繰り返す。...
LeetCode

最大部分列和をKadane’s algorithmで解く

与えられた配列のうち、連続した部分配列の和の最大値を求める問題を考える(最大部分配列問題、最大部分列和問題)。 愚直に解くと二重ループだが、O(n^2)となり遅い。 DPの一種であるKadane's algorithmを使うとO(n)で高速...
LeetCode

1302. Deepest Leaves Sum

簡単なグラフの問題。 幅優先探索と深さ優先探索の両方で解いてみた。 class Solution: def deepestLeavesSum(self, root: TreeNode) -> int: from collections im...