Latest

[LeetCode] #28 Implement strStr() 解題

題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入兩個字串 haystack 和 needle 確認 needle 是否包含在 haystack 中,如果包含就回傳第一個字元的索引 如果不包含就回傳 -1,如果 needle 是空的就回傳 0 解題思路 這題沒有什麼辦法,只能用簡單的方式來解 利用迴圈找到 haystack 存不存在 needle 的第一個字元 如果存在就利用第二個迴圈一個一個比對,比對成功就回傳索引位置 程式碼 Java class Solution { public int strStr(String haystack, String needle) { return haystack.indexOf(needle); } } class Solution { public int strStr(

By Michael

LeetCode系列文章

[LeetCode] #26 Remove Duplicates from Sorted Array 解題

題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個已經排好序的 int 陣列 nums 將這個陣列移除重複元素後把長度回傳 範例: nums = [1,1,2],則回傳 2,因為元素 1 重複了 題中還要求不能另外建立陣列,必須使用原陣列進行操作 解題思路 這一題既然要求只能使用原陣列,那就只能把不重複的數字往前排 而且陣列已經幫我們排好序,那就準備一個 index 變數用來紀錄最後一個不重複元素的索引 之後跑一次迴圈,如果遇到與 index 索引指向的元素不相同的話,把 index + 1 後把元素覆蓋過去 跑完後就能傳回不重複數量 程式碼 Java class Solution { public int removeDuplicates(int[] nums) { int index = 0; for

By Michael

LeetCode系列文章

[LeetCode] #21 Merge Two Sorted Lists 解題

題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入二個已經排好序的 Linked list 將兩個 Linked list 合併成一個 Linked list 並且排好序(小到大)後回傳 範例: list1 = [1, 2, 3, 4]、list2 = [1, 2, 3, 4],則回傳 [1, 1, 2, 2, 3, 3, 4, 4] 解題思路 我們利用一個 while 迴圈來運作,從兩個 list 中各取一個來比較 將比較小的 Node 串到要回傳的 Node 中後將該 list 的變數設為下一個

By Michael

LeetCode系列文章

[LeetCode] #20 Valid Parentheses 解題

題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個字串 s 這個字串只會由 6種符號 組成,分別是 ( ) { } [ ] 必須驗證傳入的字串 s 中的符號是不是有被正確匹配 範例: s = "()",則回傳 true s = "()[]{}",則回傳 true s = "(]",則回傳 false 解題思路 一開始我的第一直覺是利用前後索引來驗證,但遇到以下狀況就會驗證失敗 "[(){}]",這個情況是要回傳 true 的,因為所有的符號都有正確匹配 所以正確的思路是利用一個 堆(Stack) 來解題 堆的特色就是「後進先出」,這剛好完美地應對這一題 所謂的「後進先出」就是最後放入的東西會先被丟出來 利用一個迴圈掃過一次字串 s ,如果遇到開頭符號 ( { [ 我們就把結束符號放入 Stack 中,如果遇到結束符號 ) } ] 就把 Stack 中的最後一個元素丟出,

By Michael

LeetCode系列文章

[LeetCode] #14 Longest Common Prefix 解題

題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個字串陣列 strs 回傳陣列中所有字串的共同前綴 範例: strs = ["flower","flow","flight"],則回傳 "fl" strs = ["dog","racecar","car"],則回傳 "",找不到共同前綴 解題思路 這題就簡單的使用暴力法,以第一個字串當基準比對每一個 char 如果遇到不對的就直接回傳結果,可以用雙 for迴圈 也可以使用 while迴圈,隨個人喜好 程式碼 Java class Solution { public String longestCommonPrefix(String[] strs) { if (strs.length == 0 || strs[0].length() == 0) { return ""; } if (strs.

By Michael

LeetCode系列文章

[LeetCode] #13 Roman to Integer 解題

題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個羅馬數字字串 s 將羅馬數字轉成阿拉伯數字後回傳 解題思路 這一題只要按照題目中給的規則跑一次迴圈就好,很直覺 PS: 熟悉羅馬數字的規則的話可以將程式碼更省略一點 程式碼 Java class Solution { public int romanToInt(String s) { int result = 0; s += " "; // 多在字串尾加入一個空字串可以省略迴圈的邊界檢查 for (int i = 0, len = s.length() -1; i < len; i++) { switch (s.charAt(i)) { case 'I': // 需要確認下一個符號是不是 V 或 X if (s.charAt(

By Michael

LeetCode系列文章

[LeetCode] #9 Palindrome Number 解題

題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個整數 x 確認將 x 反轉後是否依然為原樣,簡單來說就是正著讀反著讀是不是都一樣 範例: x = 121,則回傳 true x = -121,則回傳 false,因為 -121 不等於 121- x = 10,則回傳 false 另外題目有說試著不要將數字轉成字串來解解看 解題思路 第一步判斷 x 如果小於 0 就回傳 false,如果小於 10 就回傳 true 之後看是要用數字的四則運算來求解還是轉成字串求解都可以 如果選擇用數字來求解,步驟與 [LeetCode] #7 Reverse Integer 解題 一樣 如果選擇用字串來求解,可以用一個

By Michael

LeetCode系列文章

[LeetCode] #7 Reverse Integer 解題

題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入一個整數 x,將 x 反轉後輸出 範例: x = 123,則回傳 321 x = -987,則回傳 -789 如果 x 反轉後溢位(超出 int 的範圍),則輸出 0 解題思路 此題可以由兩個思路來下手 一. 用數學的四則運算來求解 宣告一個 long 的變數(防止溢位) result,之後開始對 x 和 result 做運算,步驟如下 1. 將 result * 10 2. 對 x % 10 得到個位數

By Michael

LeetCode系列文章

[LeetCode] #276 Paint Fence 解題

題目連結 題型解說 這是一題難度為簡單的題目 需要設計一個方法,此方法會傳入 柱子的數量(n) 及 顏色的數量(k) 且 n 與 k 為正整數 試問可以組合出幾種顏色的組合,且相同顏色不可以連續兩隻以上 範例: n = 3,k = 2 可以組合出六種結果 顏色我們就用 R 跟 B 代替 * 第一種組合    R    R    B * 第二種組合    R    B    R * 第三種組合    R    B    B * 第四種組合    B    B    R * 第五種組合    B    R    B * 第六種組合    B

By Michael

iOS/macOS系列文章

[iOS]SwiftUI 筆記-Text

前言 此系列文章主要為記錄學習 SwiftUI 上的筆記 以防久不使用而遺忘,故內容上不像一般文章那樣完整 請見諒 基本使用 Text("Hello World.") 字型 基本 Text("Hello World.").font(.body) 進階 Text("Hello World.").font(.system(size: 30, weight: .bold, design: .default)) 粗體 Text("Hello World.").bold() 斜體 Text("Hello World.").italic() 刪除線 Text("Hello World.").strikethrough() Text("Hello World.").strikethrough(true,

By Michael

iOS/macOS系列文章

[iOS]Firebase twitter auth 使用教學

前言 這是 Firebase 快速登入的第二篇,使用的是 Twitter PS: 基本設定都在第一篇 [iOS]Firebase phone auth 使用教學 中 另外要使用 Twitter 快速登入,需要去註冊 Twitter 開發者帳號 並建立一個應用程式取得 Key 及 Token 如果不知道怎麼申請,可以參考 這篇 Step 1 (設定 Firebase) 1. 將 Twitter 的 Key 及 Token 填入 2. 將 Firebase 的 callback URL 設定到 Twitter 的應用程式中 3. 勾選啟用後儲存

By Michael

iOS/macOS系列文章

[iOS]Firebase phone auth 使用教學

前言 好久沒有寫文章了,這次就把幾種比較常見的 Firebase 快速登入給寫成文章 Firebase 建立專案的步驟就請參考 [PHP]Firebase phone auth 使用教學 中的 Step 1、Step 2 PS: Step 2 最後一步加入網域的部分就不需要了 此教學需要基本程度的 iOS 開發經驗 專案建立、基本元件(按鈕、輸入框、文字)、事件、Swift語法、Xcode操作、CocoaPod等 若是無經驗者會比較吃力 Step 1 (新增應用程式) 這次我們要在 Firebase 新增一個 iOS 的應用程式 選擇最左邊的 iOS icon 剩下的就按照畫面上的步驟做就好,這邊沒有難度 這邊可以在 Podfile 順便加入這次需要用到的套件

By Michael

走過的坑

[坑]Apple上架審核的坑

最近第一次上架了一款自己開發的macOS APP 事前知道蘋果審核非常的難搞 但不知道居然這麼難搞 被退件的原因如下 Guideline 4.1 - Design Your metadata appears to contain third party content. Specifically, we have found the name and subtitle is leveraging Windows. “For friends from Windows” Next Steps Please remove this content from your app and its metadata. 原來文字敘述內有提到 Windows 就被退件了 還有其他開發者分享經驗 * 圖片內有個機器人頭,

By Michael

iOS/macOS系列文章

[iOS]使用Swift解決鍵盤擋住輸入框問題

前言 iOS開發會遇到的問題中,鍵盤擋到輸入框這件事一定包括在內 網路上也提供了很多解決的方案 我自己評估了方便性、實作難易度、呈現效果後 提供給大家一個我自己比較喜歡的一種方式 範例(in Swift 5) 需要將想監聽的輸入框元件的 delegate 設定到本 ViewController import UIKit class ViewController: UIViewController, UITextFieldDelegate { /* 暫存輸入框元件 */ var currentTextField: UITextField? /* 暫存 View 的範圍 */ var rect: CGRect? func textFieldDidBeginEditing(_ textField: UITextField) { /* 開始輸入時,將輸入框實體儲存 */ currentTextField = textField } overr

By Michael

iOS/macOS系列文章

[iOS/macOS]使用Swift設定等寬字體

前言 使用等寬字體可以解決因文字長度不變但內容改變的情況下總寬度會變化的問題 如果是一開始就決定好的畫面可以用IDE設定字體 那如果是動態產生的元件要怎麼用呢? 語法 /* macOS 將 UIFont 改成 NSFont */ let font = UIFont.monospacedDigitSystemFont(ofSize: 14.0, weight: UIFont.Weight.regular) 範例 /* 設定好文字大小及字體樣式 */ let font = UIFont.monospacedDigitSystemFont(ofSize: 14.0, weight: UIFont.Weight.regular) for i in 0...4 { let label = UILabel(frame: CGRect(x: 0, y: i * 40, width:

By Michael

PHP系列文章

[PHP]Firebase phone auth 使用教學

前言 還記得之前寫過一篇 [PHP]Account Kit 使用教學 文章來教導怎麼利用 Facebook 提供的服務來驗證手機號碼 很可惜的是,寫完那篇文章後沒有多久 Facebook 發佈了要停止 Account Kit 的消息 很無奈~只能繼續找尋類似的服務 最後在社團 程式人雜誌 -- 公益出版 內的網友提供了建議 也就是今天這篇文章的主題 Firebase 是 Google 旗下的服務,功能非常強大 甚至可以單靠 Firebase 就能創建一個功能非常完整的後端應用 在一定額度內都是免費使用,挺適合小專案來開發 這次要使用的是其中的一項登入功能 Step 1 登入 Google 帳號後進入 Firebase首頁 選擇建立專案 輸入專案名稱 如果想要有分析報表的話可以啟用 等待一會兒 專案建立完成 Step 2 接下來要開啟登入項目 選擇左邊的

By Michael