Convert a string with digits into a literal representation of the number

Image placeholder 9899

(This question has been seen in the interviews of the following companies: Uber)

Convert a string with digits into a literal representation of the number like: 1001 to one thousand one


final String[] largeNumbers = new String[] {""," thousand"," million"," billion"," trillion"," quintillion"};//...etc
    final String[] digits = new String[] {"", " one", " two", " three", " four", " five", " six"," seven"," eight", " nine"};
    final String[] tens = new String[] {"", " ten"," twenty"," thirty"," forty"," fifty"," sixty"," seventy"," eighty"," ninety"};
    final String[] teens = new String[] {" ten", " eleven"," twelve", " thirteen", " fourteen", " fifteen", " sixteen", " seventeen"," eighteen"," nineteen"};

    String digitsToEnglish(String num) {
        if(num.length() == 1) {
            return digits[Integer.parseInt(num)];
        }
        int len = num.length();
        StringBuilder english = new StringBuilder();
        int largeNumIdx = 0, tripletIdx = 0;
        while(tripletIdx < len) {
            StringBuilder triplet = new StringBuilder();
            if(len > tripletIdx) {
                triplet.append(num.charAt(len - 1 - tripletIdx));
            }
            if(len > tripletIdx + 1) {
                triplet.insert(0, num.charAt(len - 1 - tripletIdx - 1));
            }
            if(len > tripletIdx + 2) {
                triplet.insert(0, num.charAt(len - 1 - tripletIdx - 2));
            }
            if(Integer.parseInt(triplet.toString()) != 0) {
                StringBuilder current = new StringBuilder();
                if (triplet.length() == 3 && triplet.charAt(0) != '0') {
                    //current.append(' ');
                    current.append(digits[triplet.charAt(0) - '0']);
                    current.append(' ');
                    current.append("hundred");
                }
                if (triplet.length() >= 2 && triplet.charAt(triplet.length() - 2) == '1') {
                    //current.append(' ');
                    current.append(teens[triplet.charAt(triplet.length() - 1) - '0']);
                } else {
                    if (triplet.length() >= 2) {
                        //current.append(' ');
                        current.append(tens[triplet.charAt(triplet.length() - 2) - '0']);
                    }
                    //current.append(' ');
                    current.append(digits[triplet.charAt(triplet.length() - 1) - '0']);
                }
                //current.append(' ');
                current.append(largeNumbers[largeNumIdx]);
                english.insert(0, current);
            }
            largeNumIdx += 1;
            tripletIdx += 3;
        }
        return english.toString();
    }




Get one-to-one training from Google Facebook engineers

Top-notch Professionals

Learn from Facebook and Google senior engineers interviewed 100+ candidates.
Most recent interview questions and system design topics gathered from aonecode alumnus.
One-to-one online classes. Get feedbacks from real interviewers.

Customized Private Class

Already a coding expert? - Advance straight to hard interview topics of your interest.
New to the ground? - Develop basic coding skills with your own designated mentor.
Days before interview? - Focus on most important problems in target company question bank.