每日演算法題 回文數 簡單

2021-10-11 21:28:09 字數 1770 閱讀 3575

題目描述

判斷乙個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。

示例 1:

輸入: 121

輸出: true

示例 2:

輸入: -121

輸出: false

解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是乙個回文數。

示例 3:

輸入: 10

輸出: false

解釋: 從右向左讀, 為 01 。因此它不是乙個回文數。

高階:

你能不將整數轉為字串來解決這個問題嗎?

做演算法就得想乙個難點例子,這問題思路不就慢慢來了嗎!!!!

題解:

舉個例子說明一下唄:

首先,根據示例2可知,有負號就不能為回文數,那麼就可以知道

//邊界判斷

if(x <0)

那麼再解析一下題意唄,總體意思不就是拆分數字,將正著數的和倒著數的一 一對應唄!

那麼怎麼拆分啊,還能怎麼拆分啊?我們學的最簡單的不就是取餘和除法嗎?

那麼對1221取首位1221/1000=1 那麼我們的**可以讓x=1221代替,那麼1000又怎麼代替呢?

上**吧,這裡**看了就懂了。解釋起來有點麻煩了。

int div =1;

while

(x / div >=10)

首位取了,我們就開始取末尾了唄,那不就是1221%10=1,也就是x%10,這不就好了嗎?

那麼只剩下最後一步啦,之前首位都去了,我們是不是還得取一下中間值啊?

那麼怎麼取啊?還能怎麼辦呢?用個x/div是啥?知道嗎?

那x%div你總該知道吧?這個不就是取首位。

那x/div,不就把首位移除了唄!!!,再拿(x/div)%10不就把位數也給去掉了?

x =

(x % div)/10

;

中間位數得到了,我們是不是還得改一下我們用過的div啊?是不是得縮小一下啊?縮小多少呢?

這個x縮小兩位,div是不是也得仿照一下啊 ?

div /=

100

最後上一下總體**

總體**

public

class

main

}public

static

boolean

ispalindrome

(int x)

int div =1;

//為下面的x / div取首位做準備

while

(x / div >=10)

while

(x >0)

//去掉首位和末尾,/10肯定去掉末尾,再根據 int left = x / div取首位,可知x%div得到的值是去掉首位的全部

//如1221,的221數字

x =(x % div)/10

;//x去掉了兩位數,那麼div也得去掉兩位數唄,才能相匹配

div /=

100;

}return

true;}

}

每日一道演算法題 回文數(6 15)

判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。示例 1 輸入 121 輸出 true 示例 2 輸入 121 輸出 false 解釋 從左向右讀,為 121 從右向左讀,為 121 因此它不是乙個回文數。示例 3 輸入 10 輸出 false 解釋 從右向左...

leetcode 回文數(簡單題)

判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。ps 你能不將整數轉為字串來解決這個問題嗎?一刷 時間複雜度o logn 空間複雜度o 1 但是這個解法最少迴圈1次最多迴圈1.5次,可以進行優化 class solution def ispalindrome ...

LeetCode 回文數 簡單題

判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。示例 1 輸入 121 輸出 true 示例 2 輸入 121 輸出 false 解釋 從左向右讀,為 121 從右向左讀,為 121 因此它不是乙個回文數。示例 3 輸入 10 輸出 false 解釋 從右向左...