Étant donné un entier positif N, la tâche consiste à vérifier si tous les chiffres de l’entier donné N sont les mêmes ou pas. S’il s’avère que vrai, puis imprimer Oui. Sinon, imprimez Non.
Exemples:
Saisir: N = 222
Sortir: Oui
Saisir: N = 232
Sortir: Non
Approche naïve : L’approche la plus simple pour résoudre le problème donné est d’itérer sur tous les chiffres du nombre donné N et s’il existe un chiffre distinct alors imprimez Oui. Sinon, imprimez Non.
Vous trouverez ci-dessous la mise en œuvre de l’approche ci-dessus :
Java
importer java.io.*; classe GFG { chaîne statique publique checkSameDigits(int N) { chiffre entier = N % 10 ; tandis que (N != 0) { int chiffre_courant = N % 10 ; N = N/10 ; if (chiffre_courant != chiffre) { retourner « Non » ; } } retourner « Oui » ; } public static void main(String args[]) lève IOException { entier N = 222 ; System.out.println( checkSameDigits(N)); } } |
Complexité temporelle : O(log10N)
Espace auxiliaire : O(1)
Approche efficace : L’approche ci-dessus peut également être optimisée en formant un autre nombre, disons M de la même longueur du nombre donné N avec le chiffre le plus à droite de N en supposant que N a tous les mêmes chiffres, puis en le comparant avec N. Maintenant, M est de type (K*111….), où K est n’importe quel chiffre de N.
Maintenant pour créer le nombre M composé du seul 1s, la somme d’une progression géométrique peut être utilisée comme illustré pour le nombre de chiffres comme 3 :
Considérez le premier terme (disons a) comme 1 et le rapport commun (disons r) comme 10. Maintenant, pour le nombre de chiffres (disons D) comme 3, la somme de la progression géométrique est donnée par :
=> Somme =
=> Somme =
=> Somme =
-> Somme = 111
A partir des observations ci-dessus, générer le nombre M et vérifie si K*M est le même que le N ou pas. S’il s’avère que vrai, puis imprimer Oui. Sinon, imprimez Non.
Vous trouverez ci-dessous la mise en œuvre de l’approche ci-dessus :
Java
importer java.io.*; classe GFG { chaîne statique publique checkSameDigits(int N) { longueur int = ((int)Math.log10(N)) + 1 ; int M = ((int)Math.pow(10, longueur) – 1) / (10 – 1); M *= N % 10; si (M == N) retourner « Oui » ; retourner « Non » ; } public static void main(String args[]) lève IOException { entier N = 222 ; System.out.println( checkSameDigits(N)); } } |
Complexité temporelle : O(1)
Espace auxiliaire : O(1)
Attention lecteur ! N’arrêtez pas d’apprendre maintenant. Obtenez tous les concepts mathématiques importants pour la programmation compétitive avec le Mathématiques essentielles pour le cours CP à un prix adapté aux étudiants. Pour compléter votre préparation de l’apprentissage d’une langue à DS Algo et bien d’autres, veuillez vous référer Cours complet de préparation aux entretiens.