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
}
总结
今天主要学了一下回溯,碰到一个回溯的中等题做了很久没做出来,所以就挑了几道简单点的题小摸一下鱼