1 · A + B 问题

题目

:::info 给出两个整数 ab , 求他们的和并以整数(int)的形式返回。 :::

👋你不需要从标准输入流读入数据,只需要根据aplusb传入的两个参数 a 和 b,计算他们的和并返回就行。 LintCode题解 - 图1 LintCode题解 - 图2

样例

Input:

a = 1 b = 2

Output: :::success 3 ::: Explain: :::warning a + b = 1 + 2 = 3 :::


Input:

a = -1 b = 1

Output: :::success 0 ::: Explain: :::warning a + b = -1 + 1 = 0 :::

挑战

显然你可以直接返回 a + b,但是你是否可以挑战不这样做?(不使用+等算数运算符)

代码

使用 +直接返回答案

  1. func Aplusb(a int, b int) int {
  2. // write your code here
  3. return a + b
  4. }

利用位运算符^ &``<<计算

  1. func Aplusb(a int, b int) int {
  2. // write your code here
  3. c := a
  4. d := b
  5. for d != 0{
  6. a = c
  7. b = d
  8. c = a ^ b
  9. d = a & b << 1
  10. }
  11. return c
  12. }

2 · 尾部的零

题目

:::info 给定一个整数 n,计算出n!中尾部零的个数。 :::

👋LintCode题解 - 图3你算法的时间复杂度应为 LintCode题解 - 图4

样例

Input:

n = 5

Output: :::success 1 ::: Explain: :::warning 5! = 120,尾部的0有1个。 :::


Input:

n = 11

Output: :::success 2 ::: Explain: :::warning 11! = 39916800,尾部的0有2个。 :::

代码

  1. func TrailingZeros(n int64) int64 {
  2. // write your code here
  3. res := int64(0)
  4. for n > 0 {
  5. n /= 5
  6. res += n
  7. }
  8. return res
  9. }

3 · 统计数字

题目

:::info 给定一个数字 k,计算 k 在 0n 中出现的次数,k 可能是 0 到 9 的一个值。 :::

👋LintCode题解 - 图5 LintCode题解 - 图6

样例

Input:

k = 1 n = 1

Output: :::success 1 ::: Explain: :::warning 在[0, 1]中,只有 1 中存在数字 1,故出现一次。 :::


Input:

k = 1 n = 12

Output: :::success 5 ::: Explain: :::warning 在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]中,1、10、11、12 中均出现了 1,其中 11 中出现了 2 次 1,故1出现 5 次。 :::

代码

  1. import (
  2. "fmt"
  3. "strings"
  4. )
  5. func DigitCounts(k int, n int) int {
  6. // write your code here
  7. count := 0
  8. strK := fmt.Sprintf("%d", k)
  9. for i := 0; i <= n; i++ {
  10. count += len(strings.Split(fmt.Sprintf("%d", i), strK)) - 1
  11. }
  12. return count
  13. }

4 · 丑数 II

题目

:::info 如果一个数只有质数因子235 ,那么这个数是一个丑数。
前10个丑数分别为 1, 2, 3, 4, 5, 6, 8, 9, 10, 12...
设计一个算法,找出第N个丑数。我们可以认为 1 也是一个丑数。 :::

👋LintCode题解 - 图7

样例

Input:

n = 9

Output: :::success 10 ::: Explain: :::warning [1,2,3,4,5,6,8,9,10,….],第9个丑数为10。 :::


Input:

n = 1

Output: :::success 1 ::: Explain: :::warning 1是第一个丑数 :::

挑战

要求时间复杂度为 LintCode题解 - 图8 或者 LintCode题解 - 图9

代码

  1. func NthUglyNumber(n int) int {
  2. uglies := make([]int, n)
  3. uglies[0] = 1
  4. pugly2, pugly3, pugly5 := 0, 0, 0
  5. i := 1
  6. for i < n {
  7. curUgly := min(min(uglies[pugly2]*2, uglies[pugly3]*3), uglies[pugly5]*5)
  8. uglies[i] = curUgly
  9. for uglies[pugly2]*2 <= curUgly {
  10. pugly2++
  11. }
  12. for uglies[pugly3]*3 <= curUgly {
  13. pugly3++
  14. }
  15. for uglies[pugly5]*5 <= curUgly {
  16. pugly5++
  17. }
  18. i++
  19. }
  20. return uglies[n-1]
  21. }
  22. func min(x, y int) int {
  23. if x < y {
  24. return x
  25. }
  26. return y
  27. }

5 · 第k大元素

题目

:::info 在数组中找到第 k 大的元素。 :::

👋你可以交换数组中的元素的位置。

样例

Input:

k = 1 nums = [1,3,4,2]

Output: :::success 4 ::: Explain: :::warning 第一大的元素是4。 :::


Input:

k = 3 nums = [9,3,2,4,8]

Output: :::success 4 ::: Explain: :::warning 第三大的元素是4。 :::

挑战

要求时间复杂度为LintCode题解 - 图10,空间复杂度为LintCode题解 - 图11

代码

sort后返回

  1. import (
  2. "sort"
  3. )
  4. func KthLargestElement(k int, nums []int) int {
  5. // write your code here
  6. sort.Ints(nums)
  7. return nums[len(nums)-k]
  8. }

6 · 合并排序数组

题目

:::info 将按升序排序的整数数组A和B合并,新数组也需有序。 :::

样例

Input:

A = [1] B = [1]

Output: :::success [1,1] ::: Explain: :::warning 返回合并后的数组。 :::


Input:

A = [1,2,3,4] B = [2,4,5,6]

Output: :::success [1,2,2,3,4,4,5,6] ::: Explain: :::warning 合并两个数组,并使其有序 :::

挑战

如果一个数组很大,另一个数组很小,你将如何优化算法?

代码

双指针

  1. func MergeSortedArray(a []int, b []int) []int {
  2. // write your code here
  3. res := make([]int, len(a)+len(b))
  4. ptrA, ptrB := 0, 0
  5. index := 0
  6. for ptrA < len(a) && ptrB < len(b) {
  7. if a[ptrA] < b[ptrB] {
  8. res[index] = a[ptrA]
  9. ptrA++
  10. index++
  11. } else {
  12. res[index] = b[ptrB]
  13. ptrB++
  14. index++
  15. }
  16. }
  17. for ptrA < len(a) {
  18. res[index] = a[ptrA]
  19. ptrA++
  20. index++
  21. }
  22. for ptrB < len(b) {
  23. res[index] = b[ptrB]
  24. ptrB++
  25. index++
  26. }
  27. return res
  28. }

append后sort

  1. import (
  2. "sort"
  3. )
  4. func MergeSortedArray(a []int, b []int) []int {
  5. // write your code here
  6. a = append(a, b...)
  7. sort.Ints(a)
  8. return a
  9. }

8 · 旋转字符数组

题目

:::info 给定一个字符数组 s 和一个偏移量,根据偏移量原地旋转字符数组(从左向右旋转)。 :::

👋 offset >= 0 s 的长度 >= 0
原地旋转意味着需要在函数中更改字符数组 s。你不需要返回任何东西。

样例

Input:

s = “abcdefg” offset = 3

Output: :::success “efgabcd” ::: Explain: :::warning “abcdefg” 向右旋转三个偏移量
—>"gabcdef"—>"fgabcde"—>"efgabcd" :::


Input:

s = “abcdefg” offset = 0

Output: :::success “abcdefg” ::: Explain: :::warning 注意是原地旋转,即 s 旋转后为”abcdefg” :::


Input:

s = “abcdefg” offset = 10

Output: :::success “efgabcd” ::: Explain: :::warning offset对s的长度取模后,得3,向右偏移三个量为"efgabcd" :::

代码

建立反转字符串的辅助函数 reverse()offsets长度取余后,反转三次数组即可。

  1. func RotateString(s []byte, offset int) {
  2. // write your code here
  3. if offset == 0 || len(s) == 0 {
  4. return
  5. }
  6. offset %= len(s)
  7. reverse(s, 0, len(s)-offset-1)
  8. reverse(s, len(s)-offset, len(s)-1)
  9. reverse(s, 0, len(s)-1)
  10. }
  11. func reverse(s []byte, left, right int) {
  12. for left < right {
  13. s[left], s[right] = s[right], s[left]
  14. left++
  15. right--
  16. }
  17. }

9 · Fizz Buzz 问题

题目

:::info 给定整数 n ,按照如下规则打印从 1n 的每个数:

  • 如果这个数被3整除,打印fizz。
  • 如果这个数被5整除,打印buzz。
  • 如果这个数能同时被3和5整除,打印fizz buzz。
  • 如果这个数既不能被 3 整除也不能被 5 整除,打印数字本身。 :::

    样例

    Input:

    n = 15

Output: :::success [ “1”, “2”, “fizz”, “4”, “buzz”, “fizz”, “7”, “8”, “fizz”, “buzz”, “11”, “fizz”, “13”, “14”, “fizz buzz” ] :::

挑战

你是否可以只用一个 if来实现?

代码

  1. import "strconv"
  2. func FizzBuzz(n int) []string {
  3. if n == 0 {
  4. return []string{}
  5. }
  6. str := make([]string, n)
  7. for i := 1; i <= n; i++ {
  8. switch {
  9. case i%15 == 0:
  10. str[i-1] = "fizz buzz"
  11. case i%5 == 0:
  12. str[i-1] = "buzz"
  13. case i%3 == 0:
  14. str[i-1] = "fizz"
  15. default:
  16. str[i-1] = strconv.Itoa(i)
  17. }
  18. }
  19. return str
  20. }

10 · 字符串的不同排列

题目

:::info 给出一个字符串,找到它的所有排列,注意同一个字符串不要打印两次。 :::

样例

Input:

s = “abb”

Output: :::success [“abb”, “bab”, “bba”] ::: Explain: :::warning abb的全排列有6种,其中去重后还有3种。 :::


Input:

s = “aabb”

Output: :::success [“aabb”, “abab”, “baba”, “bbaa”, “abba”, “baab”] :::

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码

模板

题目

:::info

:::

👋

样例

Input:

Output: :::success

::: Explain: :::warning

:::


Input:

Output: :::success

::: Explain: :::warning

:::

挑战

代码