从零开始的力扣刷题记录-第四十天

力扣每日四题

  • 504. 七进制数-简单
  • 859. 亲密字符串-简单
  • 914. 卡牌分组-简单
  • 102. 二叉树的层序遍历-中等
  • 总结

504. 七进制数-简单

题目描述:
给定一个整数 num,将其转化为 7 进制,并以字符串形式输出。

题解:
其实和二进制转换是一样的,除以7取余再倒序取出结果就可以了

代码(Go):

func convertToBase7(num int) string {
    if num == 0 {
        return "0"
    }
    flag := 0
    if num < 0 {
        num = -num
        flag = 1
    }
    s := []byte{}
    for num > 0 {
        s = append(s, '0'+byte(num%7))
        num /= 7
    }
    if flag == 1 {
        s = append(s, '-')
    }
    for i, n := 0, len(s); i < n/2; i++ {
        s[i], s[n-1-i] = s[n-1-i], s[i]
    }
    return string(s)
}

859. 亲密字符串-简单

题目描述:
给你两个字符串 s 和 goal ,只要我们可以通过交换 s 中的两个字母得到与 goal 相等的结果,就返回 true ;否则返回 false 。
交换字母的定义是:取两个下标 i 和 j (下标从 0 开始)且满足 i != j ,接着交换 s[i] 和 s[j] 处的字符。
例如,在 “abcd” 中交换下标 0 和下标 2 的元素可以生成 “cbad” 。

题解:
两种情况,如果两字符串相等,那么需要字符串中有两个相同的字符,如果不相等,就一次遍历每一个字符进行比对,如果只有两个字符不相等,且位置相反则返回true否则返回false

代码(Go):

func buddyStrings(s string, goal string) bool {
    if len(s) != len(goal){
        return false
    }
    if s == goal{
        arr := [26]int{}
        for i := 0;i < len(s);i++{
            arr[int(s[i] - 'a')]++
            if arr[int(s[i] - 'a')] == 2{
                return true
            }
        }
        return false
    }
    p,q := 0,0
    flag := 0
    for i := 0;i < len(s);i++{
        if s[i] != goal[i]{
            flag++
            if flag == 1{
                p = i
            }else if flag == 2{
                q = i
            }else{
                return false
            }
        }
    }
    if s[p] == goal[q] && s[q] == goal[p]{
        return true
    }
    return false
}

914. 卡牌分组-简单

题目描述:
给定一副牌,每张牌上都写着一个整数。
此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:
每组都有 X 张牌。
组内所有的牌上都写着相同的整数。
仅当你可选的 X >= 2 时返回 true。

题解:
找到最少的数字出现次数,从大到小遍历它所有的因数,找到所有数字的最大公约数,若大于等于2则返回true,若找不到或小于2则返回false

代码(Go):

func hasGroupsSizeX(deck []int) bool {
    dict := map[int]int{}
    for _,v := range deck{
        if _,ok := dict[v];ok{
            dict[v]++
        }else{
            dict[v] = 1
        }
    }
    temp := 10001
    for _,v := range dict{
        if v < temp{
            temp = v
        }
    }
    num := temp
    i := 2
    for temp >= 2{
        flag := 0
        for _,v := range dict{
            if v%temp != 0{
                flag = 1
                break
            }
        }
        if flag == 0{
            return true
        }
        for num%i != 0{
            i++
        }
        temp = num/i
        i++
    }
    return false
}

102. 二叉树的层序遍历-中等

题目描述:
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

题解:
基础题,没啥说的

代码(Go):

func levelOrder(root *TreeNode) [][]int {
    q := []*TreeNode{}
    scei := [][]int{}
    if root == nil{
        return scei
    }else{
        q = append(q,root)
    }
    for len(q) > 0{
        qh := q
        sce := []int{}
        for len(qh) > 0{
            if q[0].Left != nil{
                q = append(q,q[0].Left)
            }
            if q[0].Right != nil{
                q = append(q,q[0].Right)
            }
            sce = append(sce,qh[0].Val)
            qh = qh[1:]
            q = q[1:]
        }
        scei = append(scei,sce)
    }
    return scei
}

总结

今天主要学了一下回溯,碰到一个回溯的中等题做了很久没做出来,所以就挑了几道简单点的题小摸一下鱼

你可能感兴趣的:(leetcode刷题,leetcode,算法,golang)