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

📅  最后修改于: 2021-05-07 05:08:57             🧑  作者: Mango

给定一个数字数组,任务是按升序打印这些数字,并用逗号分隔,这些数字的位数为1、2和3。如果不存在包含数字1、2和3的数字,则打印-1。

例子:

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

询问:高盛(Goldman Sachs)
方法:首先从数组中找到包含1、2和3的所有数字,然后根据1、2和3对数字进行排序,然后打印出来。

CPP
// CPP program to print all number containing 
// 1, 2 and 3 in any order.
#include
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 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 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 array = new List();
        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))