回文數


難度級別 容易獎學金
經常問 土磚 亞馬遜 彭博社 DBOI 谷歌 空氣質量 Microsoft微軟 o9解決方案
數學

問題陳述

問題“回文數”指出您得到了一個整數。 檢查是否是回文。 解決此問題而無需將給定數字轉換為字符串。

回文數

12321
true

解釋

12321是回文數,因為當我們反轉12321時,它得出的12321與給定數相同。 因此12321是回文數。

-12321
false

解釋

-12321不是回文數,因為當我們反轉-12321時它給出的12321-與給定的數字不同。 因此-12321不是回文數。

方法 回文數檢查

我們想到的第一種方法是將給定的數字轉換為字符串,並檢查它是否是回文。 但是我們不能這樣做,因為這種方法受到限制,而且我們還需要額外的空間來容納 .

我們還可以觀察到一個重要的觀點,即負數絕不是回文數。

因此,我們將嘗試以其他方式進行處理。 我們將反轉數字並將其存儲在變量中,然後比較它是否等於原始數字。 如果反向編號等於原始編號,則該編號是回文,否則不是回文。

為了反轉給定的數字,我們將執行(remainder = n%10),這給出了數字的最後一位。 我們將通過(reversed = reversed * 10 + remainder)生成反向編號。 現在我們將數字除以10得到倒數第二個數字。 我們重複此過程,直到n的值大於零為止。

最後,我們將比較原始數字是否等於反向數字。 如果是,則該數字是回文數,否則不是回文數。

推薦碼

回文數的C ++代碼

#include<bits/stdc++.h>
using namespace std;
bool isPalindrome(int num){
  if(num < 0) return  false; 
  int reversed = 0, remainder, original = num;
  while(num != 0) {
        remainder = num % 10; 
        reversed = reversed * 10 + remainder; 
        num  /= 10; 
   }
   return original == reversed;
}
  
int main() 
{ 
   if(isPalindrome(12321)) 
     cout<<"Yes, it is Palindrome"; 
   else
     cout<<"No, not Palindrome"; 
}
Yes, it is Palindrome

回文數的Java代碼

public class check
{	 
  static  boolean isPalindrome(int num){
   if(num < 0) return  false; 
   int reversed = 0, remainder, original = num;
   while(num != 0) {
        remainder = num % 10; 
        reversed = reversed * 10 + remainder; 
        num  /= 10; 
    }
    return original == reversed;
}
  
public static void main(String args[]){ 
    if(isPalindrome(12321)) 
      System.out.println("Yes, it is Palindrome"); 
    else
      System.out.println("No, not Palindrome"); 
  } 
} 

Yes, it is Palindrome

複雜度分析

時間複雜度

檢查數字是否為回文的時間複雜度為  

空間複雜度

O(1) 因為我們使用了一個額外的變量來存儲反轉的數字。