LeetCode系列文章 [LeetCode] #12 Integer to Roman 解題 題目連結 題型解說 這是一題難度為普通的題目 需要設計一個方法,此方法會傳入一個整數 num 要求是把整數轉換成羅馬字母,轉換清單如下 I => 1 V => 5 X => 10 L => 50 C => 100 D => 500 M => 1000 但羅馬字母有一些特殊規則 4 並非 IIII
LeetCode系列文章 [LeetCode] #11 Container With Most Water 解題 題目連結 題型解說 這是一題難度為中等的題目 需要設計一個方法,此方法會傳入一個數字陣列 height 陣列中的元素代表每一個柱子的高度 現在需要計算出,該陣列中以某兩隻柱子為邊界,最多可以裝多少水 以範例來說 height = [1,8,6,2,5,4,8,3,7] 最多可以裝 7 * 7 = 49 單位的水 解題思路 計算面積就是底乘上高 底的計算方式為 「右邊柱子的 index」 減去 「左邊柱子的
LeetCode系列文章 [LeetCode] #941 Valid Mountain Array 解題 題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個數字陣列 arr 判斷陣列中的元素是不是由低到高再從高到低(山形)的排序,且不連續一個以上數字 比如說 [1,2,3,2] 就是一個山形陣列,但 [1,2,2,3,2] 不是,因為有兩個 2 [1,2,3,4,5] 和 [5,4,
LeetCode系列文章 [LeetCode] #944 Delete Columns to Make Sorted 解題 題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個字串陣列 strs 這個陣列中每個字串的長度都相同,字串內容都是小寫英文 需要檢查每個元素的第 N 個字元是不是由小至大排列,並回傳有幾個錯誤排列 比如傳入的陣列長這樣 ["cba","daf","ghi"] 取第一個字元 = cdg 取第二個字元 = bah 取第三個字元 = afi 其中第二組的結果(bah)並不是由小至大排列,故回傳 1
iOS/macOS系列文章 [iOS]SwiftUI iOS14 Sheet 不顯示的問題 問題描述 只要在同一個 View 當中有 連續 或是 嵌套 的 Sheet 有作用的 Sheet 只會是最後或最外層的一個,其他的將會不顯示 版本 Life Cycle: SwiftUI App iOS Version: 14.0 ~ 14.4 示範 案例1(嵌套) import SwiftUI struct ContentView: View { @State
Java系列文章 [Java]手把手帶你實作PTT爬蟲(2)-文章內容及儲存 前言 上一篇教學實作了一個簡單的爬蟲並成功的爬到了 PTT 的文章列表 這次就繼續將 PTT 文章內容給爬回來然後儲存到電腦上 必備知識 上一篇所列的知識 多型 介面 執行緒 檔案處理 獲取文章內容 這邊就直接放出程式碼了,大多都是上一篇說明過的部分 在 ptt.crawler.Reader 中加入以下 Method public String getBody(Article article) throws IOException { /* 如果看板需要成年檢查 */ if (article.getParent(
Java系列文章 [Java]手把手帶你實作PTT爬蟲(1)-文章列表 前言 好幾年前寫過一篇 Java 的爬蟲文章,好像是我部落格內最受歡迎的一篇... 時過境遷,Eclipse 退流行了、Java 出到 15 了,加上一些因素 打算把爬蟲文章重新寫過一遍,這次會當是做一個 Site project,盡量把內容充實一點 預計這系列文章應該會寫個五六篇以上,後面也會教到資料庫及圖形化介面 必備知識 常用 Http request Ex. get post Cookie 相關知識 HTML相關知識 CSS 選擇器相關知識 Java
攝影/影片/後製系列文章 [後製]小技巧-三個初學者配音時需注意的項目 配音 這篇主要是分享一下配音時需要注意的項目 這邊的配音指的是後製影片時才加入的聲音,而不是錄影時的錄音 需要用到配音的情況可能有以下幾種 拍片現場太吵雜,收音效果不佳 需要旁白 需要多語言 先寫好稿子 配音時能一邊看稿一邊配是比較好的選擇 一來可以不用記太多字,二來配音會很通順,三來重配時不會忘記上一次講了甚麼,四來拍片時可以預留時間長度 拍/剪片時預留好配音的時間長度 我自己第一次配音時遇到最大失誤點就是剪完片要配音時 遇到很多次原本的台詞沒辦法在預定的畫面中說完 但是影片已經剪好了,總不可能全部重來,所以只好改台詞 這邊建議是在拍/剪片時能夠預先抓好要配音的長度 配音時錄一句確認一句 在不熟悉眾多修音軟體的情況下 最好的方式就是把一句錄好後再錄下一句 雖然說這種方式要重複的 撥放 -> 聆聽 -&
LeetCode系列文章 [LeetCode] #122 Best Time to Buy and Sell Stock II 解題 題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個整數陣列 prices 這個陣列表示每一天的股票價格,若可以購買無數次(買入 + 賣出) 回傳最大利潤是多少 解題思路 這一題是 [LeetCode] #121 Best Time to Buy and Sell Stock 解題 的延伸 上一題是要求只能買一次,這一題是可以買無數次 但規則一樣是手頭有買入的股票前不能再買入 一開始解法是把所有的狀況走一遍,找出利潤最好的那個 後來看了官方提供的思路,其實只要用迴圈歷遍一次,只要比明天的價格低就把差價算到利潤去 因為最大的利潤可以拆成多個小利潤的和
攝影/影片/後製系列文章 [後製]小技巧-如何下載 Google 小姐語音 教學 如何簡單下載 Google 小姐的語音? 最簡單的方法就是在下面的網址最後加入想要的文字 https://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&tl=zh-TW&q= 比如想要讓 Google 小姐說出「你好」,只需要在網址最後加上你好,像這樣 https://translate.google.com/translate_tts?
攝影/影片/後製系列文章 [後製]使用 Photoshop 對文字加外框 前言 製作影片縮圖時都會用一些文字來敘述,但是只使用文字又覺得有些單調 那麼就來幫個文字加個外框吧。 如果沒有 Photoshop 的話,也可以使用一些線上的類 Photoshop 今天就用一個類 Photoshop 的網站 https://www.photopea.com/ 來當範例 最後有附上操作影片,可以搭配著圖文一起觀看 教學 開啟網站後看到初始畫面,點下 New Project 調整一下你要的參數,按下 Create 進入編輯畫面後,利用左邊的文字工具在畫布上寫上想要的文字 再來按住 Ctrl 後對著文字旁邊的小框框用滑鼠左鍵點一下,之後應該可以看到文字週遭出現虛線
LeetCode系列文章 [LeetCode] #121 Best Time to Buy and Sell Stock 解題 題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個整數陣列 prices 這個陣列表示每一天的股票價格,若只能購買一次(買入 + 賣出) 回傳最大利潤是多少 解題思路 原本我是利用兩個索引左右移動想辦法找出最大利潤是哪一個 但總會有一些例外狀況導致算法不通過 這題想了很久也沒想出怎麼寫才是有效率的 後來就放棄去找答案,原來只要紀錄下當下最小值與最大利潤 下次遇到更小的值就更新一下,繼續計算最大利潤就好 程式碼 Java class Solution { public int maxProfit(int[] prices) { int result = 0; int min
LeetCode系列文章 [LeetCode] #119 Pascal's Triangle II 解題 題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個整數 rowIndex 回傳一個巴斯卡三角形中的 rowIndex 層 解題思路 這題是 [LeetCode] #118 Pascal's Triangle 解題 的延伸 原本是要回傳整個巴斯卡三角形,現在只要回傳某一層 且空間複雜度只能是 O(k),也就是只能用一個 List 那麼就把每一層的值算出來,然後把下一層的值覆蓋上去 程式碼 Java class Solution { public List<
LeetCode系列文章 [LeetCode] #118 Pascal's Triangle 解題 題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個整數 numRows 回傳一個與 numRows 相同層數的巴斯卡三角形 解題思路 這一題看一下官方給的示意圖就大概知道怎麼寫了 除了第一個及最後一個元素都是 1 之外 每一個元素(j)的值都是上一層(i - 1)(j) + (i - 1)(j - 1) 程式碼 Java class Solution { public List&
LeetCode系列文章 [LeetCode] #112 Path Sum 解題 題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個二元樹 root 和一個整數 sum 回傳這棵樹有沒有一條路徑的所有節點總和為 sum 必須得要走到最後一個節點 解題思路 這題看是要寫個遞迴還是使用 Queue 搭配迴圈都可以 如果選擇遞迴版本的,可以用同一個方法來遞迴 每一層把 sum 減去節點的值後傳到下一層去 若遇到最後一個節點並且 sum 剛好為 0 就回傳 true 如果選擇迴圈版本,可以把上一層節點的值加到下一個節點中 若遇到最後一個節點並且值與 sum 一樣就回傳 true 程式碼
LeetCode系列文章 [LeetCode] #111 Minimum Depth of Binary Tree 解題 題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個二元樹 root 回傳這棵樹最淺節點深度 解題思路 這題看是要寫個遞迴還是使用 Queue 搭配迴圈都可以 記得不要用到 Stack 了,Queue 是先進先出 修改一下 [LeetCode] #110 Balanced Binary Tree 解題 的解法就可以了 程式碼 Java class Solution { public int minDepth(TreeNode root)
LeetCode系列文章 [LeetCode] #110 Balanced Binary Tree 解題 題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個二元樹 root 回傳這棵樹是不是高度平衡,也就是左節點的深度與右節點點的深度相差不超過 1 解題思路 這題看是要寫個遞迴還是使用 Stack 搭配迴圈都可以 一開始做這一題時搞錯題意,原本以為只要從根節點算左右深度相減不超過 1 就好 結果是每一個節點左右都要平衡 Orz 程式碼 Java class Solution { public boolean isBalanced(TreeNode root) { if (root == null) { return true;
LeetCode系列文章 [LeetCode] #108 Convert Sorted Array to Binary Search Tree 解題 題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個排序好的陣列 nums 回傳一顆平衡的二元搜尋樹,左右兩邊的層級不能超過 1 解題思路 二元搜尋樹有幾個特性 不會有重複的值 左節點數值一定比根節點數值小 右節點數值一定比根節點數值大 其他層的節點也要符合以上要求 既然所有的右邊節點一定比根節點大,所有左邊節點一定比根節點小,題目也規定兩邊的層數不能相差超過 1 那麼根節點只能選 nums 的中間值,這邊有個小疑問「如果 nums 是偶數呢?」,是要選左邊那個還是右邊那個? 答案其實無所謂,因為題目有提示說答案不止一種 根節點選擇好了後就能把 nums 拆成左右兩部分,左右兩部分也需要符合
LeetCode系列文章 [LeetCode] #139 Word Break 解題 題目連結 題型解說 這是一題難度為中等的題目 需要設計一個方法,此方法會傳入一個字串 s 和 字串 list wordDict 回傳能不能利用 wordDict 內的值組合出 s 範例: s = "applepenapple", wordDict = ["apple", "pen"],則回傳 true s = "catsandog", wordDict
LeetCode系列文章 [LeetCode] #107 Binary Tree Level Order Traversal II 解題 題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個二元樹 root 將這顆樹每一層的節點收集後回傳 解題思路 這題也是沒什麼難點,看是要用遞迴還是迴圈都可以解題 LeetCode 上有很多的題目都跟樹有關的,基本歷遍樹的方法掌握之後,解題上都不會太困難 程式碼 Java class Solution { public List<List<Integer>> levelOrderBottom(TreeNode root) { List<List<
LeetCode系列文章 [LeetCode] #104 Maximum Depth of Binary Tree 解題 題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個二元樹 root 回傳這棵樹最深的節點是第幾層 解題思路 這題基本上就是用遞迴去濾到最後深的一個節點,雖然說使用迴圈也可以做到 但就必須多寫一點程式碼,底下也會提供迴圈的版本 講回到遞迴,都必須搭配一個數字來計算第幾層 有從第一層加下去的,也有從最後一層加上來的 兩種版本也會附上 程式碼 Java class Solution { // 從第一層加下去 public int maxDepth(TreeNode root) { return maxDepth(root, 1); } private int
LeetCode系列文章 [LeetCode] #101 Symmetric Tree 解題 題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個二元樹 root 回傳這棵樹是不是左右對稱的 解題思路 這題跟上一題 [LeetCode] #100 Same Tree 解題 是高度相像的 唯一的差異是因為要確認是否對稱,所以是左邊跟右邊比,右邊跟左邊比,中間一樣跟中間比 其中一個沒比對上就回傳 false 程式碼 Java class Solution { public boolean isSymmetric(TreeNode root) { if (root == null)
LeetCode系列文章 [LeetCode] #100 Same Tree 解題 題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入兩個二元樹 p 和 q 回傳這兩棵樹是不是完全一樣 解題思路 這題看是要寫個遞迴還是使用 Stack 搭配迴圈都可以 沒有什麼困難點,就是左邊跟左邊比,右邊跟右邊比,中間跟中間比 其中一個沒比對上就回傳 false 程式碼 Java class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { if (p == null
LeetCode系列文章 [LeetCode] #88 Merge Sorted Array 解題 題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入兩個已排序的整數陣列 nums1 nums2 及它們各自的長度 m 與 n 將 nums2 的元素合併到 nums1 後進行排序即可 另 nums1 有保留給 nums2 的欄位,所以不需要另外產生新的陣列 範例: nums1 = [1,2,3,0,0,0], m = 3, nums2
LeetCode系列文章 [LeetCode] #83 Remove Duplicates from Sorted List 解題 題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個已經排序好的 Linked List head,當中每一個元素都有一個數字 將這個所有的重複數字移除後回傳 範例: head = 1->1->2,則回傳 1->2 head = 1->1->2->3->3,則回傳 1-&