给定一个数字数组,任务是按升序打印这些数字,以逗号分隔,逗号的数字中有1、2和3。如果没有包含数字1、2和3的数字,则打印-1。
null
例如:
Input : numbers[] = {123, 1232, 456, 234, 32145} Output : 123, 1232, 32145 Input : numbers[] = {9821, 627183, 12, 1234} Output : 1234, 627183 Input : numbers[] = {12, 232, 456, 234} Output : -1
被问到: 高盛 方法: 首先从数组中查找包含 1, 2 & 3 然后根据1、2和3对数字进行排序,然后打印出来。
CPP
// CPP program to print all number containing // 1, 2 and 3 in any order. #include<bits/stdc++.h> using namespace std; // convert the number to string and find // if it contains 1, 2 & 3. bool findContainsOneTwoThree( int number) { string str = to_string(number); int countOnes = 0, countTwo = 0, countThree = 0; for ( int i = 0; i < str.length(); i++) { if (str[i] == '1' ) countOnes++; else if (str[i] == '2' ) countTwo++; else if (str[i] == '3' ) countThree++; } return (countOnes && countTwo && countThree); } // prints all the number containing 1, 2, 3 string printNumbers( int numbers[], int n) { vector< int > oneTwoThree; for ( int i = 0; i < n; i++) { // check if the number contains 1, // 2 & 3 in any order if (findContainsOneTwoThree(numbers[i])) oneTwoThree.push_back(numbers[i]); } // sort all the numbers sort(oneTwoThree.begin(), oneTwoThree.end()); string result = "" ; for ( auto number: oneTwoThree) { int value = number; if (result.length() > 0) result += ", " ; result += to_string(value); } return (result.length() > 0) ? result : "-1" ; } // Driver Code int main() { int numbers[] = { 123, 1232, 456, 234, 32145 }; int n = sizeof (numbers)/ sizeof (numbers[0]); string result = printNumbers(numbers, n); cout << result; return 0; } // This code is contributed // by Sirjan13 |
JAVA
// Java program to print all number containing // 1, 2 and 3 in any order. import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; class GFG { // prints all the number containing 1, 2, 3 // in any order private static String printNumbers( int [] numbers) { ArrayList<Integer> array = new ArrayList<>(); for ( int number : numbers) { // check if the number contains 1, // 2 & 3 in any order if (findContainsOneTwoThree(number)) array.add(number); } // sort all the numbers Collections.sort(array); StringBuffer strbuf = new StringBuffer(); Iterator it = array.iterator(); while (it.hasNext()) { int value = ( int )it.next(); if (strbuf.length() > 0 ) strbuf.append( ", " ); strbuf.append(Integer.toString(value)); } return (strbuf.length() > 0 ) ? strbuf.toString() : "-1" ; } // convert the number to string and find // if it contains 1, 2 & 3. private static boolean findContainsOneTwoThree( int number) { String str = Integer.toString(number); return (str.contains( "1" ) && str.contains( "2" ) && str.contains( "3" )); } public static void main(String[] args) { int [] numbers = { 123 , 1232 , 456 , 234 , 32145 }; System.out.println(printNumbers(numbers)); } } |
python
# Python program for printing # all numbers containing 1,2 and 3 def printNumbers(numbers): # convert all numbers # to strings numbers = map ( str , numbers) result = [] for num in numbers: # check if each number # in the list has 1,2 and 3 if ( '1' in num and '2' in num and '3' in num): result.append(num) # if there are no # valid numbers if not result: result = [ '-1' ] return sorted (result); # Driver Code numbers = [ 123 , 1232 , 456 , 234 , 32145 ] result = printNumbers(numbers) print ', ' .join(num for num in result) # This code is contributed # by IshitaTripathi |
C#
// C# program to print all number // containing 1, 2 and 3 in any order. using System; using System.Collections.Generic; using System.Text; class GFG { // prints all the number // containing 1, 2, 3 // in any order private static string printNumbers( int [] numbers) { List< int > array = new List< int >(); foreach ( int number in numbers) { // check if the number contains 1, // 2 & 3 in any order if (findContainsOneTwoThree(number)) { array.Add(number); } } // sort all the numbers array.Sort(); StringBuilder strbuf = new StringBuilder(); System.Collections.IEnumerator it = array.GetEnumerator(); while (it.MoveNext()) { int value = ( int )it.Current; if (strbuf.Length > 0) { strbuf.Append( ", " ); } strbuf.Append(Convert.ToString(value)); } return (strbuf.Length > 0) ? strbuf.ToString() : "-1" ; } // convert the number // to string and find // if it contains 1, 2 & 3. private static bool findContainsOneTwoThree( int number) { string str = Convert.ToString(number); return (str.Contains( "1" ) && str.Contains( "2" ) && str.Contains( "3" )); } // Driver Code public static void Main( string [] args) { int [] numbers = new int [] {123, 1232, 456, 234, 32145}; Console.WriteLine(printNumbers(numbers)); } } // This code is contributed by Shrikant13 |
输出:
123, 1232, 32145
时间复杂性: 上述方法的时间复杂度为 O(nlg(n)) .
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END