回文数


難易度 簡単に
よく聞かれる Adobe Amazon (アマゾン) ブルームバーグ DBOI Google MAQ マイクロソフト o9ソリューション
数学

問題文

問題「回文数」は、整数が与えられていることを示しています。 回文かどうかを確認します。 指定された数値を文字列に変換せずに、この問題を解決します。

回文数

12321
true

説明

12321を逆にすると、指定された番号と同じ12321が得られるため、12321は回文数です。 したがって、12321は回文数です。

-12321
false

説明

-12321を逆にすると、指定された番号と同じではない12321-が得られるため、-12321は回文数ではありません。 したがって、-12321は回文数ではありません。

のためのアプローチ 回文数チェック

私たちの頭に浮かぶ最初のアプローチは、与えられた数値を文字列に変換し、それが回文であるかどうかを確認することです。 ただし、このアプローチは制限されており、追加のスペースが必要なため、これを行うことはできません。 文字列.

また、負の数は回文数ではないという重要な点もあります。

そのため、別の方法でアプローチしようとします。 数値を逆にして変数に格納し、元の数値と等しいかどうかを比較します。 逆の数が元の数と等しい場合、その数は回文です。それ以外の場合は、回文ではありません。

与えられた数を逆にするために実行します(剰余= n%10)これは数の最後の桁を与えます。 (reversed = reverse * 10 + restander)によって反転数を生成します。 次に、数値を10で割って、最後からXNUMX番目の桁を取得します。 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) 逆数を格納するためにXNUMXつの追加変数を使用しているためです。