網(wǎng)站首頁 編程語言 正文
回文數(shù)
判斷一個(gè)整數(shù)是否是回文數(shù)?;匚臄?shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)。
示例 1:
輸入: 121 輸出: true
示例?2:
輸入: -121 輸出: false 解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個(gè)回文數(shù)。
示例 3:
輸入: 10 輸出: false 解釋: 從右向左讀, 為 01 。因此它不是一個(gè)回文數(shù)。
進(jìn)階:
你能不將整數(shù)轉(zhuǎn)為字符串來解決這個(gè)問題嗎?
代碼模板
public class Solution { public bool IsPalindrome(int x) { } }
筆者的代碼
運(yùn)行時(shí)間在120ms左右,筆者的思路是:如果一個(gè)數(shù)字的反序還是等于這個(gè)數(shù),那么這個(gè)數(shù)就是回文數(shù)。
以下代碼無法解決反序后可能溢出,可以利用上一題的代碼進(jìn)行溢出檢查。
當(dāng)然,一個(gè)int類型的數(shù),如果是回文,那么他的反序肯定不會(huì)溢出,反之其反序發(fā)生溢出則肯定不是回文數(shù)。
public class Solution { public bool IsPalindrome(int x) { if (x < 0) return false; int xx = x; int num = 0; //x的反序 while (xx != 0) //求反序 { int i = xx % 10; xx = xx / 10; num = num * 10 + i; } if (x == num) //如果x的反序num==x,那么這個(gè)數(shù)字是回文數(shù) return true; else return false; } }
?加try-catch,耗時(shí)增加 10~20ms
try { while (xx != 0) { int i = xx % 10; xx = xx / 10; num = num * 10 + i; } } catch { return false; }
官方這道題給出了示例代碼,耗時(shí)120ms左右,思路是只反序一半,反序后的原始數(shù)、反序一半的數(shù)進(jìn)行比較,也就不用檢查溢出。
public class Solution { public bool IsPalindrome(int x) { // 特殊情況: // 如上所述,當(dāng) x < 0 時(shí),x 不是回文數(shù)。 // 同樣地,如果數(shù)字的最后一位是 0,為了使該數(shù)字為回文, // 則其第一位數(shù)字也應(yīng)該是 0 // 只有 0 滿足這一屬性 if(x < 0 || (x % 10 == 0 && x != 0)) { return false; } int revertedNumber = 0; while(x > revertedNumber) { revertedNumber = revertedNumber * 10 + x % 10; x /= 10; } // 當(dāng)數(shù)字長度為奇數(shù)時(shí),我們可以通過 revertedNumber/10 去除處于中位的數(shù)字。 // 例如,當(dāng)輸入為 12321 時(shí),在 while 循環(huán)的末尾我們可以得到 x = 12,revertedNumber = 123, // 由于處于中位的數(shù)字不影響回文(它總是與自己相等),所以我們可以簡單地將其去除。 return x == revertedNumber || x == revertedNumber/10; } }
別人用字符串方式進(jìn)行判斷(雖然題目說不能用string),耗時(shí)150-180ms,不太穩(wěn)定
public class Solution { public bool IsPalindrome(int x) { string str = x.ToString(); for (int i = 0; i < str.Length / 2; ++i) { if (str[i] != str[str.Length - 1 - i]) { return false; } } return true; } }
原文鏈接:https://www.cnblogs.com/whuanle/p/10352752.html
相關(guān)推薦
- 2022-07-04 Python基礎(chǔ)之矩陣輸入的實(shí)例_python
- 2022-05-12 databinding 與 RecyclerView.Adapter
- 2022-06-26 C#實(shí)現(xiàn)數(shù)組元素的數(shù)據(jù)類型轉(zhuǎn)換方法詳解_C#教程
- 2024-03-05 layui彈出層的表單驗(yàn)證(form表單自帶的驗(yàn)證不執(zhí)行)
- 2022-07-13 JMeter主要元件_線程組的使用方法
- 2022-03-29 在pyqt5中展示pyecharts生成的圖像問題_python
- 2023-07-09 echarts的series已經(jīng)為空但是還加載出數(shù)據(jù)
- 2022-04-10 Blazor組件事件處理功能_基礎(chǔ)應(yīng)用
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支