LeetCode Easy: 1、9、13
LeetCode練習與詳解

1. Two Sum

求某數組中哪兩位數的和等於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}
}

9. Palindrome Number

判斷是否為迴文數字,例如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);
}

13. Roman to Integer

羅馬字母轉成數字

// 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