用golang刷leetcode

1,296 阅读2分钟

1. 两数之和 - 力扣(LeetCode) (leetcode-cn.com)

func twoSum(nums []int, target int) []int {
    dict := make(map[int]int)
    for i, num := range nums {
        if j, ok := dict[target - num]; ok {
            return []int{j, i}
        }
        dict[num] = i
    }
    return nil
}
  • golang的map只声明是空的,不能直接赋值;如果需要直接赋值,应该用make函数创建一个map。切片同样如此。
  • 切片和数组不能直接用大括号加元素的方式表示,必须加上数据类型。

2. 两数相加 - 力扣(LeetCode) (leetcode-cn.com)

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
    dummy := &ListNode{}
    p := dummy
    carry := 0
    for l1 != nil && l2 != nil {
        sum := l1.Val + l2.Val + carry
        p.Next = &ListNode{
            Val : sum % 10,
        }
        carry = sum / 10
        l1 = l1.Next
        l2 = l2.Next
        p = p.Next
    }
    for l1 != nil {
        sum := l1.Val + carry
        p.Next = &ListNode{
            Val : sum % 10,
        }
        carry = sum / 10
        l1 = l1.Next
        p = p.Next
    }
    for l2 != nil {
        sum := l2.Val + carry
        p.Next = &ListNode{
            Val : sum % 10,
        }
        carry = sum / 10
        l2 = l2.Next
        p = p.Next
    }
    if carry > 0 {
        p.Next = &ListNode{
            Val : carry,
        }
    }
    return dummy.Next
}
  • golang的循环只有for,没有while。
  • golang的初始化语句和标志语句是可选的,但与C++不同的是,省略这两个语句后分号也要省去。
  • golang创建一个对象通常不用new关键词,而是直接通过&符号创建。

3. 无重复字符的最长子串 - 力扣(LeetCode) (leetcode-cn.com)

func lengthOfLongestSubstring(s string) int {
    dict := map[byte]int{}
    n := len(s)
    rk, ans := -1, 0
    for i := 0; i < n; i++ {
        if i > 0 {
            delete(dict, s[i - 1])
        }
        for rk + 1 < n && dict[s[rk + 1]] == 0 {
            dict[s[rk + 1]]++
            rk++
        }
        ans = max(ans, rk - i + 1)
    }
    return ans
}

func max(i, j int) int {
    if i > j {
        return i
    }
    return j
}
  • golang中map除了使用make的方式创建,也可以使用map[byte]int{}这种方式创建。
  • golang没有char类型,用byte类型代替。
  • golang没有max函数。。。因为golang不支持重载,所以只有一个math.Max(float, float), 其他的类型自己实现吧。
  • golang中map使用delete函数进行删除(即使该元素不存在delete也是安全的),插入元素直接赋值即可,查询元素也是直接取值,用返回的ok判断是否存在。