網站首頁 編程語言 正文
回文數
判斷一個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。
示例 1:
輸入: 121 輸出: true
示例?2:
輸入: -121 輸出: false 解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個回文數。
示例 3:
輸入: 10 輸出: false 解釋: 從右向左讀, 為 01 。因此它不是一個回文數。
進階:
你能不將整數轉為字符串來解決這個問題嗎?
代碼模板
public class Solution { public bool IsPalindrome(int x) { } }
筆者的代碼
運行時間在120ms左右,筆者的思路是:如果一個數字的反序還是等于這個數,那么這個數就是回文數。
以下代碼無法解決反序后可能溢出,可以利用上一題的代碼進行溢出檢查。
當然,一個int類型的數,如果是回文,那么他的反序肯定不會溢出,反之其反序發生溢出則肯定不是回文數。
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,那么這個數字是回文數 return true; else return false; } }
?加try-catch,耗時增加 10~20ms
try { while (xx != 0) { int i = xx % 10; xx = xx / 10; num = num * 10 + i; } } catch { return false; }
官方這道題給出了示例代碼,耗時120ms左右,思路是只反序一半,反序后的原始數、反序一半的數進行比較,也就不用檢查溢出。
public class Solution { public bool IsPalindrome(int x) { // 特殊情況: // 如上所述,當 x < 0 時,x 不是回文數。 // 同樣地,如果數字的最后一位是 0,為了使該數字為回文, // 則其第一位數字也應該是 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; } // 當數字長度為奇數時,我們可以通過 revertedNumber/10 去除處于中位的數字。 // 例如,當輸入為 12321 時,在 while 循環的末尾我們可以得到 x = 12,revertedNumber = 123, // 由于處于中位的數字不影響回文(它總是與自己相等),所以我們可以簡單地將其去除。 return x == revertedNumber || x == revertedNumber/10; } }
別人用字符串方式進行判斷(雖然題目說不能用string),耗時150-180ms,不太穩定
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
相關推薦
- 2022-08-05 C語言示例講解for循環的用法_C 語言
- 2022-10-13 Android?8.0實現藍牙遙控器自動配對_Android
- 2021-12-02 Android?NDK開發(C語言--動態內存分配)_Android
- 2022-06-23 Python+Turtle制作獨特的表白圖_python
- 2022-05-25 Windows系統修改Jenkins端口號_win服務器
- 2022-01-21 scala中泛型,協變和逆變
- 2022-03-27 Python編程入門指南之函數_python
- 2022-07-10 elementUI去掉el-card內部padding
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支