按升序打印数字,数字中包含1、2和3。

给定一个数字数组,任务是按升序打印这些数字,以逗号分隔,逗号的数字中有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
喜欢就支持一下吧
点赞14 分享