LeetCode 在需要接觸演算碼的工程師中,為相當知名的練習場所。當你有需要挑戰自己的腦筋、面試前的準備……等,都滿適合來這邊看一下你的演算法和資料結構的熟悉程度。這回要筆記的有 Happy Number、First Unique Character in a String、Find the Difference。
題目
202. Happy Number
[連結]:https://leetcode.com/problems/happy-number/
由於這一題的設計,相加到結果出現為一位數時,可以直接判斷是否為 1 或 7 。因為 1 or 7 一定是 Happy Number。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
/* * 方法一:取得每一次 sum 的結果,當出現結果時就迭代呼叫,直到出現答案 * 方法二:判斷每一次 sum 的結果,如果為無窮出現或是結果不是 1 ,那就 return false */ var isHappy = function(n) { let raw = n.toString() let sum = 0 if(raw.length === 1){ return Number(raw) === 1 || Number(raw) === 7 }else{ for(let i=0; i<raw.length;i++){ sum += Number(raw[i]**2) } return isHappy(sum) } }; var isHappy = function(n) { let map = {} let raw = n.toString() while(!map[raw] && Number(raw) !== 1){ let result = 0 for(let i=0; i<raw.length;i++){ map[raw] = result += Number(raw[i]**2) } raw = result.toString() } return Number(raw) === 1 }; |
387. First Unique Character in a String
[連結]:https://leetcode.com/problems/first-unique-character-in-a-string/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/* 1. 用一個 map 來記錄曾經出現過的字母和記錄 * 2. 取出 map 中的記數為 1 的物件,並用其 key 去和 s 作比對,取得 index。 */ var firstUniqChar = function(s) { let map = {} for(let i=0;i<s.length;i++){ if(map[s[i]]){ map[s[i]] ++ }else{ map[s[i]] = 1 } } let uniques = Object.entries(map).filter(item=>item[1]===1).map(d=>d[0]) return s.indexOf(uniques[0]) }; |
389. Find the Difference
[連結]:https://leetcode.com/problems/find-the-difference/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* * 1. 先將 s, t 依照字母大小順序排好 * 2. s 進行 for 迴圈,如果對應的值不一樣,就直接回傳該 t[i] 值:否則就回傳 t 的最後一個值 */ var findTheDifference = function(s, t) { s = s.split("").sort((a,b)=> a>b ? 1 : -1).join("") t = t.split("").sort((a,b)=> a>b ? 1 : -1).join("") for(let i=0;i<s.length;i++){ if(s[i] !== t[i]){ return t[i] } } return t[t.length-1] }; |