java回文数算法for_【Java】【每日算法/刷穿 LeetCode】9. 回文数(简单)
首頁
專欄
java
文章詳情
0
【每日算法/刷穿 LeetCode】9. 回文數(shù)(簡單)
宮水三葉發(fā)布于 今天 15:30
題目描述
判斷一個整數(shù)是否是回文數(shù)。回文數(shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)。
示例 1:
輸入: 121
輸出: true
示例 2:
輸入: -121
輸出: false
解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個回文數(shù)。
示例 3:
輸入: 10
輸出: false
解釋: 從右向左讀, 為 01 。因此它不是一個回文數(shù)。
進階:
你能不將整數(shù)轉為字符串來解決這個問題嗎?
字符串解法
既然進階里提到了不能用字符串來解決,那么三葉就提供一下吧。
class Solution {
public boolean isPalindrome(int x) {
String s = String.valueOf(x);
StringBuilder sb = new StringBuilder(s);
sb.reverse();
return sb.toString().equals(s);
}
}
時間復雜度:數(shù)字 n 的位數(shù),數(shù)字大約有 log10(n) 位,翻轉操作要執(zhí)行循環(huán)。復雜度為 O(log10(n))
空間復雜度:使用了字符串作為存儲。復雜度為 O(log10(n))
非字符串解法(完全翻轉)
原數(shù)值 x 的不超過 int 的表示范圍,但翻轉后的值會有溢出的風險,所以這里使用 long 進行接收,最后對比兩者是否相等。
class Solution {
public boolean isPalindrome(int x) {
if (x < 0) return false;
long ans = 0;
int t = x;
while (x > 0) {
ans = ans * 10 + x % 10;
x /= 10;
}
return ans - t == 0;
}
}
時間復雜度:數(shù)字 n 的位數(shù),數(shù)字大約有 $\log{10}{n}$ 位。復雜度為 $\log{10}{n}$
空間復雜度:$O(1)$
非字符串解法(部分翻轉)
如果在進階中增加一個我們熟悉的要求:環(huán)境中只能存儲得下 32 位的有符號整數(shù)。
那么我們就連 long 也不能用了,這時候要充分利用「回文」的特性:前半部分和后半部分(翻轉)相等。
這里的前半部分和后半部分(翻轉)需要分情況討論:
回文長度為奇數(shù):回文中心是一個獨立的數(shù),即 忽略回文中心后,前半部分 == 后半部分(翻轉)。如 1234321 回文串
回文長度為偶數(shù):回文中心在中間兩個數(shù)中間,即 前半部分 == 后半部分(翻轉)。如 123321
class Solution {
public boolean isPalindrome(int x) {
// 對于 負數(shù) 和 x0、x00、x000 格式的數(shù),直接返回 flase
if (x < 0 || (x % 10 == 0 && x != 0)) return false;
int t = 0;
while (x > t) {
t = t * 10 + x % 10;
x /= 10;
}
// 回文長度的兩種情況:直接比較 & 忽略中心點(t 的最后一位)進行比較
return x == t || x == t / 10;
}
}
時間復雜度:數(shù)字 n 的位數(shù),數(shù)字大約有 $\log{10}{n}$ 位。復雜度為 $\log{10}{n}$
空間復雜度:$O(1)$
最后
這是我們「刷穿 LeetCode」系列文章的第 No.9 篇,系列開始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道題目,部分是有鎖題,我們將先將所有不帶鎖的題目刷完。
在這個系列文章里面,除了講解解題思路以外,還會盡可能給出最為簡潔的代碼。如果涉及通解還會相應的代碼模板。
由于 LeetCode 的題目隨著周賽 & 雙周賽不斷增加,為了方便我們統(tǒng)計進度,我們將按照系列起始時的總題數(shù)作為分母,完成的題目作為分子,進行進度計算。當前進度為 9/1916 。
為了方便各位同學能夠電腦上進行調試和提交代碼,我建立了相關的倉庫:Github 地址 & Gitee 地址。
在倉庫地址里,你可以看到系列文章的題解鏈接、系列文章的相應代碼、LeetCode 原題鏈接和一些其他的優(yōu)選題解。
算法與數(shù)據(jù)結構
LeetCode題解
算法面試
面試java算法leetcode數(shù)據(jù)結構與算法
閱讀 34發(fā)布于 今天 15:30
贊收藏
分享
本作品系原創(chuàng),采用《署名-非商業(yè)性使用-禁止演繹 4.0 國際》許可協(xié)議
刷穿LeetCode
公眾號:「宮水三葉的刷題日記 」。每天十分鐘,快樂學算法 ~
關注專欄
宮水三葉
關注公眾號:「宮水三葉的刷題日記 」。
1聲望
0粉絲
關注作者
0 條評論
得票時間
提交評論
宮水三葉
關注公眾號:「宮水三葉的刷題日記 」。
1聲望
0粉絲
關注作者
宣傳欄
目錄
▲
題目描述
判斷一個整數(shù)是否是回文數(shù)。回文數(shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)。
示例 1:
輸入: 121
輸出: true
示例 2:
輸入: -121
輸出: false
解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個回文數(shù)。
示例 3:
輸入: 10
輸出: false
解釋: 從右向左讀, 為 01 。因此它不是一個回文數(shù)。
進階:
你能不將整數(shù)轉為字符串來解決這個問題嗎?
字符串解法
既然進階里提到了不能用字符串來解決,那么三葉就提供一下吧。
class Solution {
public boolean isPalindrome(int x) {
String s = String.valueOf(x);
StringBuilder sb = new StringBuilder(s);
sb.reverse();
return sb.toString().equals(s);
}
}
時間復雜度:數(shù)字 n 的位數(shù),數(shù)字大約有 log10(n) 位,翻轉操作要執(zhí)行循環(huán)。復雜度為 O(log10(n))
空間復雜度:使用了字符串作為存儲。復雜度為 O(log10(n))
非字符串解法(完全翻轉)
原數(shù)值 x 的不超過 int 的表示范圍,但翻轉后的值會有溢出的風險,所以這里使用 long 進行接收,最后對比兩者是否相等。
class Solution {
public boolean isPalindrome(int x) {
if (x < 0) return false;
long ans = 0;
int t = x;
while (x > 0) {
ans = ans * 10 + x % 10;
x /= 10;
}
return ans - t == 0;
}
}
時間復雜度:數(shù)字 n 的位數(shù),數(shù)字大約有 $\log{10}{n}$ 位。復雜度為 $\log{10}{n}$
空間復雜度:$O(1)$
非字符串解法(部分翻轉)
如果在進階中增加一個我們熟悉的要求:環(huán)境中只能存儲得下 32 位的有符號整數(shù)。
那么我們就連 long 也不能用了,這時候要充分利用「回文」的特性:前半部分和后半部分(翻轉)相等。
這里的前半部分和后半部分(翻轉)需要分情況討論:
回文長度為奇數(shù):回文中心是一個獨立的數(shù),即 忽略回文中心后,前半部分 == 后半部分(翻轉)。如 1234321 回文串
回文長度為偶數(shù):回文中心在中間兩個數(shù)中間,即 前半部分 == 后半部分(翻轉)。如 123321
class Solution {
public boolean isPalindrome(int x) {
// 對于 負數(shù) 和 x0、x00、x000 格式的數(shù),直接返回 flase
if (x < 0 || (x % 10 == 0 && x != 0)) return false;
int t = 0;
while (x > t) {
t = t * 10 + x % 10;
x /= 10;
}
// 回文長度的兩種情況:直接比較 & 忽略中心點(t 的最后一位)進行比較
return x == t || x == t / 10;
}
}
時間復雜度:數(shù)字 n 的位數(shù),數(shù)字大約有 $\log{10}{n}$ 位。復雜度為 $\log{10}{n}$
空間復雜度:$O(1)$
最后
這是我們「刷穿 LeetCode」系列文章的第 No.9 篇,系列開始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道題目,部分是有鎖題,我們將先將所有不帶鎖的題目刷完。
在這個系列文章里面,除了講解解題思路以外,還會盡可能給出最為簡潔的代碼。如果涉及通解還會相應的代碼模板。
由于 LeetCode 的題目隨著周賽 & 雙周賽不斷增加,為了方便我們統(tǒng)計進度,我們將按照系列起始時的總題數(shù)作為分母,完成的題目作為分子,進行進度計算。當前進度為 9/1916 。
為了方便各位同學能夠電腦上進行調試和提交代碼,我建立了相關的倉庫:Github 地址 & Gitee 地址。
在倉庫地址里,你可以看到系列文章的題解鏈接、系列文章的相應代碼、LeetCode 原題鏈接和一些其他的優(yōu)選題解。
算法與數(shù)據(jù)結構
LeetCode題解
算法面試
《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的java回文数算法for_【Java】【每日算法/刷穿 LeetCode】9. 回文数(简单)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql按章_mysql按时间范围分区
- 下一篇: 各类数据类型的用法java_Java各种