Generate 10-digit number using a phone keypad

后端 未结 12 958
遥遥无期
遥遥无期 2020-12-13 14:12

Given a phone keypad as shown below:

1 2 3
4 5 6
7 8 9
  0

How many different 10-digit numbers can be formed starting from 1? The constrain

12条回答
  •  难免孤独
    2020-12-13 14:37

    Recursive memoization approach:

    vector> lupt = { {4, 6}, {6, 8}, {9, 7}, {4, 8}, {3, 9, 0},
                                 {},     {1,7,0}, {6, 2}, {1, 3}, {2, 4} };
    
    int numPhoneNumbersUtil(int startdigit, int& phonenumberlength, int currCount, map< pair,int>& memT)
    {
        int noOfCombs = 0;
        vector enddigits;
    
        auto it = memT.find(make_pair(startdigit,currCount));
        if(it != memT.end())
        {
            noOfCombs = it->second;
            return noOfCombs;
        }
    
        if(currCount == phonenumberlength)
        {
            return 1;
        }
    
        enddigits = lupt[startdigit];
        for(auto it : enddigits)
        {
            noOfCombs += numPhoneNumbersUtil(it, phonenumberlength, currCount + 1, memT);
        }
    
        memT.insert(make_pair(make_pair(startdigit,currCount), noOfCombs));
        return memT[make_pair(startdigit,currCount)];
    
    }
    
    int numPhoneNumbers(int startdigit, int phonenumberlength)
    {
        map,int> memT;
        int currentCount = 1; //the first digit has already been added
        return  numPhoneNumbersUtil(startdigit, phonenumberlength, currentCount, memT);
    }
    

提交回复
热议问题