第一题 Fizz Buzz
题目信息
解题思路
先赋 i
再找 3 的倍数赋 Fizz
再找 5 的倍数赋 Buzz
,其中如果遇到 15 的倍数就赋 FizzBuzz
代码
func fizzBuzz(n int) []string {s:=make([]string,n)
for i:=0;i<n;i++{s[i]=strconv.Itoa(i+1)
}
if n<3 {return s}
for i:=2;i<n;i+=3{s[i]="Fizz"
}
if n<5{return s}
for i:=4;i<n;i+=5{if (i+1)%15!=0{s[i]="Buzz"
}else{s[i]="FizzBuzz"}
}
return s
}
优化
这种办法须要在每次赋值的时候写一个新的字符串退出数组
能够应用官解的字符串拼接使效率失去晋升
对于字符串拼接能够看这个:https://www.cnblogs.com/apoce…
func fizzBuzz(n int) (ans []string) {
for i := 1; i <= n; i++ {sb := &strings.Builder{}
if i%3 == 0 {sb.WriteString("Fizz")
}
if i%5 == 0 {sb.WriteString("Buzz")
}
if sb.Len() == 0 {sb.WriteString(strconv.Itoa(i))
}
ans = append(ans, sb.String())
}
return
}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/fizz-buzz/solution/fizz-buzz-by-leetcode-solution-s0s5/
起源:力扣(LeetCode)著作权归作者所有。商业转载请分割作者取得受权,非商业转载请注明出处。
复杂度剖析
工夫复杂度:O(n)。须要遍历从 1 到 n 的每个整数,对于每个整数 i,生成 answer[i] 的工夫复杂度是 O(1)。
空间复杂度:O(1)。留神返回值不计入空间复杂度。
第二题 计数质数
题目信息
解题思路
代码
func countPrimes(n int) (cnt int) {isPrime := make([]bool, n)
for i := range isPrime {isPrime[i] = true
}
for i := 2; i < n; i++ {if isPrime[i] {
cnt++
for j := 2 * i; j < n; j += i {isPrime[j] = false
}
}
}
return cnt
}