每日一例 | 回文數(shù)了解下?

題目來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/palindrome-number
難度:簡單
題目描述
給你一個整數(shù) x,如果 x 是一個回文整數(shù),返回 true;否則,返回 false。
回文數(shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)。例如,121是回文,而 123 不是。
示例 1:
輸入:x = 121
輸出:true
示例 2:
輸入:x = -121
輸出:false
解釋:從左向右讀, 為 -121 。從右向左讀, 為 121- 。因此它不是一個回文數(shù)。示例 3:
輸入:x = 10
輸出:false
解釋:從右向左讀, 為 01 。因此它不是一個回文數(shù)。示例 4:
輸入:x = -101
輸出:false
提示:
-231 <= x <= 231 - 1
第一次提交
看完這個題,特別是用例和結(jié)果,我發(fā)現(xiàn)和昨天分享的那種解法,剛好也可以用到這里,所以很多,我有了第一種解法:
class Solution {
public boolean isPalindrome(int x) {
if (x < 0) {
return false;
}
int n = 0;
int temp = x;
while (x != 0) {
n = n * 10 + x % 10;
x = x / 10;
}
return n == temp;
}
}
從提交結(jié)果來看,還是挺不錯的。我們來簡單說下思路,根據(jù)題目描述,回文數(shù)的特點有以下幾點:
正序和反序(反轉(zhuǎn))數(shù)值一樣 負數(shù)都不是回文數(shù)
所以第一種解法就是將目標數(shù)反轉(zhuǎn),先判斷是否為負數(shù),負數(shù)直接返回false,然后計算目標數(shù)值的反轉(zhuǎn)數(shù),比較反轉(zhuǎn)前和反轉(zhuǎn)后是否一致,一致就是回文數(shù),否則就不是

第二次提交
其實,第二次可能是大部分人的思路(包括我),如果不是剛做完整數(shù)反轉(zhuǎn),那我可能也這么做了:
class Solution {
public boolean isPalindrome(int x) {
if (x < 0) {
return false;
}
boolean isPalindrome = false;
String xStr = String.valueOf(x);
char[] chars = xStr.toCharArray();
for (int i = 0; i <= chars.length / 2; i++) {
isPalindrome = (chars[i] == chars[chars.length -1 -i]);
if (!isPalindrome) {
return isPalindrome;
}
}
return isPalindrome;
}
}
提交結(jié)果和第一次差不多,但是時間上比第一次長了一點。這里的思路就很簡單了,就是挨個比較,比較數(shù)字長度的一半就可以:

簡單優(yōu)化
把上面的代碼做了一些簡單的優(yōu)化修改,內(nèi)存消耗方面有了較大的提升:
class Solution {
public boolean isPalindrome(int x) {
if (x < 0) {
return false;
}
char[] chars = String.valueOf(x).toCharArray();
for (int i = 0; i <= chars.length / 2; i++) {
if (!(chars[i] == chars[chars.length -1 -i])) {
return false;
}
}
return true;
}
}

當然如果從代碼的可讀性上講,第一種會比第二種更好,但是算法往往是考慮性能的,所以如果單純從算法角度來說,第二種更好。
總結(jié)
算法問題永遠不會是唯一解,解決問題的關鍵在于你要有正確的解題思路,而思路的建立又依托于你對問題的建模能力(抽象化思維),建模能力又是靠不斷地解決問題積累的,總結(jié)下就是算法考察的是你的邏輯思維(數(shù)學能力)和抽象化思維(實際問題抽象成模型,將問題與模型匹配,選擇更合適的模型),看你是否可以將這兩者很好的結(jié)合,寫出最優(yōu)解,畢竟日常工作中,一切業(yè)務邏輯本質(zhì)上都是算法,一切業(yè)務邏輯的實現(xiàn)過程就是建立算法的過程,所以算法能力就是你編程能力的體現(xiàn)。
作為一個開發(fā)工程師,算法能力是最基本但特別重要的能力,這個能力和語言、系統(tǒng)、環(huán)境無關無關的,但很大程度上決定了你在這個行業(yè)能走多遠,畢竟大廠對于算法都是有要求的,如果你的算法能力很差,沒人會相信你能寫出好代碼。好了,今天就到這里吧,一定要堅持學習哦!
項目路徑:
https://github.com/Syske/example-everyday
本項目會每日更新,讓我們一起學習,一起進步,遇見更好的自己,加油呀
- END -