整数算法

整数算法

1.整数反转

/*
题目:整数反转
leetcode:7
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
输入:x = -123
输出:-321
输入:x = 123
输出:321
思路:利用取模取余运算,将数字部分反转,然后将反转后的数字部分与符号部分相乘
*/
func reverse(x int) int {
	num := 0
	for x != 0 {
		tmp := x % 10
		num = num*10 + tmp
		x = x / 10
	}
	if num < math.MinInt32 || num > math.MaxInt32 {
		return 0
	}
	return num
}

/*
解法2:转成字符串,前后换位置,再转成int
*/
func reverse2(x int) int {
	a := 1
	if x < 0 {
		a = -1
		x = -x
	}
	strX := []byte(fmt.Sprintf("%d", x))
	length := len(strX)
	for i := 0; i < length/2; i++ {
		strX[i], strX[length-1-i] = strX[length-1-i], strX[i]
	}
	num, _ := strconv.Atoi(string(strX))
	if num > math.MaxInt32 {
		return 0
	}
	return num * a
}

func main() {
	n := reverse2(-123)
	fmt.Println(n)
}

2.验证回文数

/*
题目:回文数
leetcode:9
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
输入:x = 121
输出:true
输入:x = -121
输出:false
思路:
解法1:转成字符串,前后对比
解法2:反转数字,再与原来的对比
解法3:转成字符串,反转字符串,对比
*/
func isPalindrome(x int) bool {
	strX := fmt.Sprintf("%d", x)
	lenth := len(strX)
	for i := 0; i < lenth/2; i++ {
		if strX[i] != strX[lenth-i-1] {
			return false
		}
	}
	return true
}

/*
解法2:反转数字,再与原来的对比
*/
func isPalindrome2(x int) bool {
	if x < 0 {
		return false
	}
	num := 0
	y := x
	for y != 0 {
		num = num*10 + y%10
		y = y / 10
	}
	return x == num
}
func main() {
	a := -121
	n := isPalindrome2(a)
	fmt.Println(n)
}

3.罗马数字转整数

/*
题目:罗马数字转整数
leetcode:13
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

输入: s = "III"
输出: 3

思路:遍历字符串,当前数值小于下一个数值,减去当前数值,否则加当前数值
罗马数字特点:下一个值比当前大,则当前值的符号为负,下一个值比当前小,则当前值为正。IV=-1+5=4,VI=5+1=6
*/
func romanToInt(s string) (ans int) {
	m := map[byte]int{'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
	lenth := len(s)
	num := 0
	for i := 0; i < lenth; i++ {
		if i < lenth-1 && m[s[i]] < m[s[i+1]] {
			num -= m[s[i]]
		} else {
			num += m[s[i]]
		}
	}
	return num
}

func main() {
	s := "IVI"
	n := romanToInt(s)
	fmt.Println(n)
}

posted @ 2024-01-30 20:42  Jeff的技术栈  阅读(4)  评论(0编辑  收藏  举报
回顶部