iOS算法系列(二)--回文整數(shù)

難易度:易
題目:判斷一個(gè)整數(shù)是否是回文數(shù)?;匚臄?shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)。

特別說明:LeetCode上此題認(rèn)為-123 倒過來是123-不是回文數(shù),我感覺因?yàn)椴皇亲址?,有待商榷,那我們就不考慮負(fù)數(shù)的情況。

思路:
1:如果是正整數(shù)不考慮字符串的情況下,那我們應(yīng)該會想到把正整數(shù)反轉(zhuǎn)輸出對比原數(shù)據(jù),如果相等就是回文數(shù),關(guān)于數(shù)字反轉(zhuǎn),請參考我的iOS算法系列(一)--數(shù)字反轉(zhuǎn)。
2:如果我們在考慮優(yōu)化的話,那我們只需要反轉(zhuǎn)一半的數(shù)字即可,比如:456654,我們反轉(zhuǎn)后三位得到456,剩下的三位為456。即可得到次數(shù)為回文數(shù)。
3:那如何判斷正好反轉(zhuǎn)了一半呢,就用反轉(zhuǎn)的后的數(shù)字10和剩下未反轉(zhuǎn)的數(shù)字進(jìn)行大小比較,如果大于剩下的那就是反轉(zhuǎn)一半了,比如1221,第一次反轉(zhuǎn)得到的數(shù)字為1,那么110=10, 10<122,繼續(xù)反轉(zhuǎn),12*10 = 120, 120 >12,那么代表已經(jīng)轉(zhuǎn)了一半。
3:那上面考慮的是偶數(shù)位的情況,如果是奇數(shù)位的話,也可以使用。
4:最后因?yàn)槲覀儾恢赖降资瞧鏀?shù)位還是偶數(shù)位,我們需要用一個(gè)或狀態(tài)來返回兩種可能的情況

代碼如下,已經(jīng)下Xcode上編譯運(yùn)行,并輸出正確結(jié)果

-(BOOL)isPalindrome:(NSInteger)paraInt
{
    //小于10不是回文數(shù)
    if (paraInt <= 10)
    {
        return NO;
    }
//我們拿反轉(zhuǎn)數(shù)求模剩余的數(shù)字進(jìn)行比較,反轉(zhuǎn)一半的數(shù)就可以,如果是奇數(shù)的話,我們只需要把他去除掉即可
    NSInteger temp = 0;
    while (temp * 10 < paraInt)
    {
        temp = paraInt % 10 + temp * 10;
        paraInt /= 10;
    }
    return temp == paraInt || temp/10 == paraInt;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容