LeetCodeのEasy問題を解いて勉強するSwift Invert Binary Tree編



LeetCodeのEasy問題を解いて勉強するSwift Invert Binary Tree編

新しくSwiftを触ることになりそうなので

ひとまずコードを書いてみることにする。
LeetCodeのEasy問題は比較的解き方を知っている(はず)なので、Python3で書いていた部分をどのような書き方に直すのかを色々思い出しつつ試行錯誤していく。

書いている人のレベル感

Swiftビギナー。基本的な文法すらあやふやなので始めて数日レベルと言っても過言ではない。

LeetCode

お題が与えられ、その内容に合わせてコードを書き、提出して合ってるかどうかを確認できる。
問題はソフトウェアエンジニアのコーディング面接で出されたお題をそのまま引用していることがほとんど。

前回
LeetCodeのEasy問題を解いて勉強するSwift Binary Search編

Invert Binary Tree

Invert Binary Tree
与えられたバイナリツリーをInvert(反転)させてrootを返す関数を書く。

/**
* Definition for a binary tree node.
* public class TreeNode {
*     public var val: Int
*     public var left: TreeNode?
*     public var right: TreeNode?
*     public init() { self.val = 0; self.left = nil; self.right = nil; }
*     public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
*     public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
*         self.val = val
*         self.left = left
*         self.right = right
*     }
* }
*/
class Solution {
   func invertTree(_ root: TreeNode?) -> TreeNode? {
       guard let root = root else { return nil }
       (root.left,root.right) = (root.right,root.left)
       _ = invertTree(root.left)
       _ = invertTree(root.right)

       return root
       }
}

_(アンダースコア)

ここで_について。
Swiftでは代入する値に対して返り値を使用しない場合に宣言をしなくても_を使用することが可能。
再帰的に呼び出している

_ = invertTree(root.left)
_ = invertTree(root.right)

の箇所は入れ替える処理を実際には戻り値を使用していないが、こういった書き方をすることも可能。

ただ、実は

invertTree(root.left)
invertTree(root.right)

これでもテストケースは通るし問題ないといえば問題ない。というかこっちの書き方の方が好き

学べたこと

Swiftでの_の使い方

コメント

このブログの人気の投稿

Braveブラウザ(iPhone,iPad)にオフラインでもYouTubeの動画が視聴可能なPlaylist機能が追加されていたので使い方をまとめてみた。

自作のChrome Extensionをインポートした時に "Invalid value for 'content_scripts[0].matches[0]': Empty path."というエラーが出たので解決した

Braveブラウザの同期機能をiPhoneで設定した話。