LeetCode Easy: 1、9、13
LeetCode練習與詳解
求某數組中哪兩位數的和等於X
// go
// nums []int=傳入的數組;target=X
func twoSum(nums []int, target int) []int {
m := make(map[int]int, len(nums))
for i, num := range nums {
if idx, ok := m[target-num]; ok {
return []int{idx, i}
}
m[num] = i
}
return []int{0, 0}
}
判斷是否為迴文數字,例如121
// java
public boolean isPalindrome(int x) {
// 判斷是否迴文,如121、2332、456654
// 負數或尾數是0或<10的顯然可以排除
if (x < 0 || (x != 0 && x % 10 == 0))
return false;
// 開始將數字不斷拆開直到左右對半分為止
int res = 0;
while (x > res) {
// res跑一趟,相當於取出個位數,並反著向左拚出原來的數據
res = res * 10 + x % 10;
// x跑一趟則相當於切掉最右邊的數
x = x / 10;
// 舉例456654跑三輪的結果是這樣
// res=4, 45, 456
// x=45665, 4566, 456
}
// 如果是偶數位x==res,x == res / 10是給奇數用的
return (x == res || x == res / 10);
}
羅馬字母轉成數字
// go
// s=傳入的羅馬字串
func romanToInt(s string) int {
// 創一個map將所有羅馬字對應數值
var romanMap = map[byte]int{'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
var result = romanMap[s[len(s)-1]] // 先取最右邊的那1位羅馬字是多少
for i := len(s) - 2; i >= 0; i-- { // 從右2羅馬字開始往左數
if romanMap[s[i]] < romanMap[s[i+1]] { // 如果羅馬字右邊>左邊,例如IV或IX這種情況,表示要減去左邊位
result -= romanMap[s[i]]
} else {
result += romanMap[s[i]] // 否則相加
}
// 循環至i=0,也就是最左邊的羅馬字位也算完即是最終答案
}
return result
}
上次修改於 2021-11-16