How can I print out all possible letter combinations a given phone number can represent?

前端 未结 30 2186
逝去的感伤
逝去的感伤 2020-12-22 18:01

I just tried for my first programming interview and one of the questions was to write a program that given a 7 digit telephone number, could print all possible combinations

30条回答
  •  無奈伤痛
    2020-12-22 18:37

    #include 
    #include 
    #include 
    
    map< int, string> keyMap;
    
    void MakeCombinations( string first, string joinThis , vector& eachResult )
    {
        if( !first.size() )
            return;
    
        int length = joinThis.length();
        vector result;
    
        while( length )
        {
            string each;
            char firstCharacter = first.at(0);
            each =  firstCharacter;
            each += joinThis[length -1];
            length--;
    
            result.push_back(each);     
        }
    
        first = first.substr(1);
    
        vector::iterator begin = result.begin();    
        vector::iterator end = result.end();
        while( begin != end)
        {
            eachResult.push_back( *begin);
            begin++;
        }
    
        return MakeCombinations( first, joinThis, eachResult);
    }
    
    
    void ProduceCombinations( int inNumber, vector& result)
    {
        vector inputUnits;
    
        int number = inNumber;
        while( number )
        {
            int lastdigit ;
    
            lastdigit = number % 10;
            number = number/10;
            inputUnits.push_back( keyMap[lastdigit]);
        }
    
        if( inputUnits.size() == 2)
        {
            MakeCombinations(inputUnits[0], inputUnits[1], result);
        }
        else if ( inputUnits.size() > 2 )
        {
            MakeCombinations( inputUnits[0] , inputUnits[1], result);
    
            vector::iterator begin = inputUnits.begin();    
            vector::iterator end = inputUnits.end();
    
            begin += 2;
            while(  begin != end )
            {
                vector intermediate = result;
                vector::iterator ibegin = intermediate.begin(); 
                vector::iterator iend = intermediate.end(); 
    
                while( ibegin != iend)
                {
                    MakeCombinations( *ibegin , *begin, result);
                    //resultbegin =  
                    ibegin++; 
                }
                begin++;            
            }
        }
        else
        {
    
        }
    
        return;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        keyMap[1] = "";
        keyMap[2] = "abc";
        keyMap[3] = "def";
        keyMap[4] = "ghi";
        keyMap[5] = "jkl";
        keyMap[6] = "mno";
        keyMap[7] = "pqrs";
        keyMap[8] = "tuv";
        keyMap[9] = "wxyz";
        keyMap[0] = "";
    
        string  inputStr;
        getline(cin, inputStr);
    
        int number = 0;
    
        int length = inputStr.length();
    
        int tens = 1;
        while( length )
        {
            number += tens*(inputStr[length -1] - '0');
            length--;
            tens *= 10;
        }
    
        vector r;
        ProduceCombinations(number, r);
    
        cout << "[" ;
    
        vector::iterator begin = r.begin(); 
        vector::iterator end = r.end();
    
        while ( begin != end)
        {
            cout << *begin << "," ;
            begin++;
        }
    
        cout << "]" ;
    
        return 0;
    }
    

提交回复
热议问题