风雨雾凇 风雨雾凇
首页
  • 服务端

    • golang
  • 其他

    • leetcode
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

风雨雾凇

技术小渣渣
首页
  • 服务端

    • golang
  • 其他

    • leetcode
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • golang

  • 技术文档

  • GitHub技巧

  • Nodejs

  • 博客搭建

  • leetcode

    • 两数之和-1
    • 无重复字符的最长子串-3
    • 整数翻转-7
    • 回文数-9
      • 题目地址:两数之和
      • 思路
      • 代码
      • 最佳解
    • 13-罗马数字转整数
    • 最长公共前缀
    • 3Sum
    • Valid Parentheses
    • Merge Two Sorted Lists
    • Remove Duplicates from Sorted Array
    • Remove Element
    • Implement strStr()
    • Search Insert Position
    • Count and Say
    • 字符串相乘
    • Maximum Subarray
    • Length of Last Word
    • Plus One
    • Add Binary
    • Sqrt(x)
    • 翻转字符串里的单词
    • 字符串的排列
  • 机器学习

  • 技术
  • leetcode
风雨雾凇
2019-12-16
目录

回文数-9

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:
输入: 121
输出: true

示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读

示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:

你能不将整数转为字符串来解决这个问题吗?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 题目地址:两数之和 (opens new window)

# 思路

同整数回转, 取目标数的每位并回转判断。负数及对10求余等于0的数(不包括0)表示最后一为一定为0, 必不可能是回文数。

最佳解法只要反转一半数字再判断是否相等,就知道是不是回文数。

而当x小于保存的数时,即表示已经到达中间了
e.g. x:12321 res:0 -> x:12321 res:1 -> x:1232 res:12 -> x:123 => res = x/10
此时x<=res则跳出循环去判断,分奇数和偶数两种情况,奇数时res要整除10
1
2
3

# 代码

func isPalindrome(x int) bool {
	if x < 0 {
		return false
	}
	pre_x := x
	reverseNum := 0

	for ; ; {
		if x == 0 {
			break
		}
		reverseNum = reverseNum * 10 + x % 10
		x /= 10
	}
	return pre_x == reverseNum
}

func Test_isPalindrome(t *testing.T) {
	print(isPalindrome(123321))
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 最佳解

func isPalindrome(x int) bool {
    // 只要是负数,肯定不是回文数
	// 若对十求余数为0,表明最后一位是0,肯定不是回文数
	if x < 0 || (x % 10 == 0 && x != 0) {
		return false
	}
	res := 0
	// 只要反转一半数字再判断是否相等,就知道是不是回文数
	// 而当x小于保存的数时,即表示已经到达中间了
	// e.g. x:12321 res:0 -> x:12321 res:1 -> x:1232 res:12 -> x:123 => res = x/10
	// 此时x<=res则跳出循环去判断,分奇数和偶数两种情况,奇数时res要整除10
	for x > res {
		tmp := x % 10
		x /= 10
		res = res*10 + tmp
	}
	return x == res || x == res / 10
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
编辑 (opens new window)
#leetcode#每日训练#算法#面试#学习笔记
上次更新: 2023/02/17, 16:53:03
整数翻转-7
13-罗马数字转整数

← 整数翻转-7 13-罗马数字转整数→

最近更新
01
builtin
02-12
02
导读
02-12
03
13-罗马数字转整数
01-30
更多文章>
Theme by Vdoing | Copyright © 2017-2023 风雨雾凇 | 粤ICP备16018321号-2
博客内容遵循署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式