q7整数反转q8 字符串转换整数q9 回文数q43 字符串相乘q172 阶乘后的零q258 各位相加
q7整数反转
题目传送门
题解
水题。
func reverse(x int) int {
num := 0
for x != 0 {
num = num * 10 + x % 10
x /= 10
if num < -math.MaxInt32 || num > math.MaxInt32 {
return 0
}
}
return num
}
q8 字符串转换整数
题目传送门
题解
跟着题目的要求一步一步来即可,首先通过增加下标清除前导空格。然后判断正负号,判断正负号的时候要注意,得使用else if,不然当字符串前面连续出现-和+号时会出现问题,后面累加数字+判断是否超出区间即可。
func myAtoi(s string) int {
i, num, isNegative, n := 0, 0, 1, len(s)
for i < n && s[i] == ' ' {
i++
}
if i < n {
if s[i] == '-' {
isNegative = -1
i++
} else if s[i] == '+' {
i++
}
}
for i < n && s[i] >= '0' && s[i] <= '9' {
num = num * 10 + int(s[i] - '0')
if isNegative * num < (-math.MaxInt32 - 1) {
return (-math.MaxInt32 - 1)
}
if isNegative * num > math.MaxInt32 {
return math.MaxInt32
}
i++
}
return isNegative * num
}
q9 回文数
题目传送门
题解
反转数字,如果与原数字相等,就是回文数。
func isPalindrome(x int) bool {
if x < 0 {
return false
}
num := 0
tmp := x
for tmp != 0 {
num = num * 10 + tmp % 10
tmp /= 10
}
return num == x
}
q43 字符串相乘
传送门
题解
高精度乘法。
func multiply(num1 string, num2 string) string {
a := make([]int, 111)
b := make([]int, 111)
c := make([]int, 300)
len1 := len(num1)
len2 := len(num2)
for i := 0; i < len1; i++ {
a[len1 - i] = int(num1[i] - '0')
}
for i := 0; i < len2; i++ {
b[len2 - i] = int(num2[i] - '0')
}
for i := 1; i <= len1; i++ {
for j := 1; j <= len2; j++ {
c[i + j - 1] += a[i] * b[j]
if c[i + j - 1] >= 10 {
c[i + j] += c[i + j - 1] / 10
c[i + j - 1] %= 10
}
}
}
var p int
if len1 < len2 {
p = len1
} else {
p = len2
}
for i := p; i <= len1 + len2; i++ {
if c[i] > 0 {
p = i
}
}
str := ""
for i := p; i > 0; i-- {
str += string(c[i] + '0')
}
return str
}
q172 阶乘后的零
题目传送门
题解
要求使用对数时间复杂度的算法来求解,是一道数学题。5和任何偶数相乘都会产生0,所以只需要统计数n里面含有5的数量就可以了。
func trailingZeroes(n int) int {
res := 0
for n > 0 {
res += n / 5
n /= 5
}
return res
}
q258 各位相加
题目传送门
题解
使用以下解法既简单又快,但是我还看到一位大佬更加简单的做法。
func addDigits(num int) int {
for num >= 10 {
num = num % 10 + num / 10
}
return num
}
通过找规律和总结去求解:
https://leetcode-cn.com/problems/add-digits/solution/san-bu-qing-song-li-jie-o1-by-data-t/



