Leetcode-数字 *** 作

Leetcode-数字 *** 作,第1张

Leetcode-数字 *** 作

文章目录

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/


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5714269.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存