给定一个范围,打印所有具有唯一数字的数字。
null
例如:
Input : 10 20Output : 10 12 13 14 15 16 17 18 19 20 (Except 11)Input : 1 10Output : 1 2 3 4 5 6 7 8 9 10
方法:
As the problem is pretty simple, the only thing to be done is :-1- Find the digits one by one and keep marking visited digits.2- If all digits occurs one time only then print that number.3- Else not.
C++
// C++ implementation to find unique digit // numbers in a range #include<bits/stdc++.h> using namespace std; // Function to print unique digit numbers // in range from l to r. void printUnique( int l, int r) { // Start traversing the numbers for ( int i=l ; i<=r ; i++) { int num = i; bool visited[10] = { false }; // Find digits and maintain its hash while (num) { // if a digit occurs more than 1 time // then break if (visited[num % 10]) break ; visited[num%10] = true ; num = num/10; } // num will be 0 only when above loop // doesn't get break that means the // number is unique so print it. if (num == 0) cout << i << " " ; } } // Driver code int main() { int l = 1, r = 20; printUnique(l, r); return 0; } |
JAVA
// Java implementation to find unique digit // numbers in a range class Test { // Method to print unique digit numbers // in range from l to r. static void printUnique( int l, int r) { // Start traversing the numbers for ( int i=l ; i<=r ; i++) { int num = i; boolean visited[] = new boolean [ 10 ]; // Find digits and maintain its hash while (num != 0 ) { // if a digit occurs more than 1 time // then break if (visited[num % 10 ]) break ; visited[num% 10 ] = true ; num = num/ 10 ; } // num will be 0 only when above loop // doesn't get break that means the // number is unique so print it. if (num == 0 ) System.out.print(i + " " ); } } // Driver method public static void main(String args[]) { int l = 1 , r = 20 ; printUnique(l, r); } } |
Python3
# Python3 implementation # to find unique digit # numbers in a range # Function to print # unique digit numbers # in range from l to r. def printUnique(l,r): # Start traversing # the numbers for i in range (l, r + 1 ): num = i; visited = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ]; # Find digits and # maintain its hash while (num): # if a digit occurs # more than 1 time # then break if visited[num % 10 ] = = 1 : break ; visited[num % 10 ] = 1 ; num = ( int )(num / 10 ); # num will be 0 only when # above loop doesn't get # break that means the # number is unique so # print it. if num = = 0 : print (i, end = " " ); # Driver code l = 1 ; r = 20 ; printUnique(l, r); # This code is # contributed by mits |
C#
// C# implementation to find unique digit // numbers in a range using System; public class GFG { // Method to print unique digit numbers // in range from l to r. static void printUnique( int l, int r) { // Start traversing the numbers for ( int i = l ; i <= r ; i++) { int num = i; bool []visited = new bool [10]; // Find digits and maintain // its hash while (num != 0) { // if a digit occurs more // than 1 time then break if (visited[num % 10]) break ; visited[num % 10] = true ; num = num / 10; } // num will be 0 only when // above loop doesn't get // break that means the number // is unique so print it. if (num == 0) Console.Write(i + " " ); } } // Driver method public static void Main() { int l = 1, r = 20; printUnique(l, r); } } // This code is contributed by Sam007. |
PHP
<?php // PHP implementation to find unique // digit numbers in a range // Function to print unique digit // numbers in range from l to r. function printUnique( $l , $r ) { // Start traversing the numbers for ( $i = $l ; $i <= $r ; $i ++) { $num = $i ; $visited = (false); // Find digits and // maintain its hash while ( $num ) { // if a digit occurs more // than 1 time then break if ( $visited [ $num % 10]) $visited [ $num % 10] = true; $num = (int) $num / 10; } // num will be 0 only when above // loop doesn't get break that // means the number is unique // so print it. if ( $num == 0) echo $i , " " ; } } // Driver code $l = 1; $r = 20; printUnique( $l , $r ); // This code is contributed by aj_36 ?> |
Javascript
<script> // Javascript implementation to find unique digit // numbers in a range // Function to print unique digit numbers // in range from l to r. function printUnique(l, r) { // Start traversing the numbers for (let i=l ; i<=r ; i++) { let num = i; let visited = new Array(10); // Find digits and maintain its hash while (num) { // if a digit occurs more than 1 time // then break if (visited[num % 10]) break ; visited[num%10] = true ; num = Math.floor(num/10); } // num will be 0 only when above loop // doesn't get break that means the // number is unique so print it. if (num == 0) document.write(i + " " ); } } // Driver code let l = 1, r = 20; printUnique(l, r); // This code is contributed by Mayank Tyagi </script> |
输出:
1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20
另一种方法:
使用STL来设置C++和java的java集合,以便检查一个数字是否只有唯一的数字。然后我们可以比较由给定数字和新创建的集合形成的字符串s的大小。例如,让我们考虑数字1987,然后我们可以把数字转换成字符串,
C++
int n; cin>>n; string s = to_string(n); |
JAVA
//creating scanner class object for taking user input Scanner sc = new Scanner(System.in); int n=sc.nextInt(); //converting the number to string using String.valueof(number); string s = String.valueof(n); |
然后,用字符串s的内容初始化一个集合。
C++
set< int > uniDigits(s.begin(), s.end()); |
JAVA
HashSet<Integer> uniDigits = new HashSet<Integer>(); for ( int i:s.tocharArray()) { uniDigits.add(i); } |
然后我们可以比较字符串s的大小和新创建的单位数集。
以下是上述方法的代码:
C++
// C++ code for the above approach #include <bits/stdc++.h> using namespace std; // Function to print unique // numbers void printUnique( int l, int r){ // Iterate from l to r for ( int i = l; i <= r; i++) { // Convert the no. to // string string s = to_string(i); // Convert string to set using stl set< int > uniDigits(s.begin(), s.end()); // Output if condition satisfies if (s.size() == uniDigits.size()) { cout << i << " " ; } } } // Driver Code int main() { // Input of the lower and // higher limits int l = 1, r = 20; // Function Call printUnique(l, r); return 0; } |
JAVA
// Java code for the above approach import java.util.*; class GFG{ // Function to print unique // numbers static void printUnique( int l, int r) { // Iterate from l to r for ( int i = l; i <= r; i++) { // Convert the no. to // String String s = String.valueOf(i); // Convert String to set using Java Collections HashSet<Integer> uniDigits = new HashSet<Integer>(); for ( int c : s.toCharArray()) uniDigits.add(c); // Output if condition satisfies if (s.length() == uniDigits.size()) { System.out.print(i+ " " ); } } } // Driver Code public static void main(String[] args) { // Input of the lower and // higher limits int l = 1 , r = 20 ; // Function Call printUnique(l, r); } } // This code is contributed by Princi Singh |
C#
// C# code for the above approach using System; using System.Collections.Generic; class GFG{ // Function to print unique // numbers static void printUnique( int l, int r) { // Iterate from l to r for ( int i = l; i <= r; i++) { // Convert the no. to // String String s = String.Join( "" , i); // Convert String to set using stl HashSet< int > uniDigits = new HashSet< int >(); foreach ( int c in s.ToCharArray()) uniDigits.Add(c); // Output if condition satisfies if (s.Length == uniDigits.Count) { Console.Write(i + " " ); } } } // Driver Code public static void Main(String[] args) { // Input of the lower and // higher limits int l = 1, r = 20; // Function Call printUnique(l, r); } } // This code is contributed by Princi Singh |
Javascript
<script> // JavaScript code for the above approach // Function to print unique // numbers function printUnique(l, r) { // Iterate from l to r for (let i = l; i <= r; i++) { // Convert the no. to // string let s = String(i); // Convert string to set using stl let uniDigits = new Set(); for (let c of s.split( "" )) uniDigits.add(c); // Output if condition satisfies if (s.length == uniDigits.size) { document.write(i + " " ); } } } // Driver Code // Input of the lower and // higher limits let l = 1, r = 20; // Function Call printUnique(l, r); </script> |
输出
1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20
本文由 萨希尔·查布拉 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END