LeetCode热题100道-Day03

107 阅读1分钟

LeetCode热题100道-Day03

94. 二叉树的中序遍历

  • 递归
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func inorderTraversal(root *TreeNode) []int {
    res := make([]int, 0)
    tra(root, &res)
    return res
}
func tra(root *TreeNode, res *[]int) {
    if root==nil {
        return 
    }
    tra(root.Left, res)
    *res = append(*res, root.Val)
    tra(root.Right, res)
}

19. 删除链表的倒数第 N 个结点

  • 两个指针,先让其中一个指针先走n步,然后两个指针同时前进,当前面的指针走到尽头,则后面的指针也达到预期位置,然后即可删除需要删除的节点
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func removeNthFromEnd(head *ListNode, n int) *ListNode {
    tempNode := &ListNode{}
    tempNode.Next = head
    p := tempNode
    for i:=0; i<n; i++ {
        head = head.Next
    }
    for head!=nil {
        p = p.Next
        head = head.Next
    }
    p.Next = p.Next.Next
    return tempNode.Next
}

62. 不同路径

  • 动态规划。定义dp[i][j] 为 走到点(i, j)总共的路径
func uniquePaths(m int, n int) int {
    dp := make([][]int, m)
    for i := range dp {
        dp[i] = make([]int, n)
    }
    dp[0][0] = 1
    for i:=1; i<m; i++ {
        dp[i][0] = 1
    }   
    for i:=1; i<n; i++ {
        dp[0][i] = 1
    }
    for i:=1; i<m; i++ {
        for j:=1; j<n; j++ {
            dp[i][j] = dp[i][j-1]+dp[i-1][j]
        }
    }
    return dp[m-1][n-1]
}

169. 多数元素

  • 因为题目说明,多数是出现次数多于 n/2 的数,所以,只要对该数组排序,那么在数组中间的值即为需要的答案
func majorityElement(nums []int) int {
    sort.Ints(nums)
	return nums[len(nums)/2]
}

283. 移动零

  • 双指针,指针j在前面遍历,i在后面定位,若j位置的数不为0,则将j位置的值赋给i位置的,并将i指针往前走
func moveZeroes(nums []int)  {
    i := 0
    for j:=0; j<len(nums); j++ {
        if nums[j]!=0 {
            nums[i] = nums[j]
            if i!=j {
                nums[j] = 0
            }
            i++
        }
    }
}