美文网首页程序员
力扣 273 移动零

力扣 273 移动零

作者: zhaojinhui | 来源:发表于2020-08-18 12:14 被阅读0次

    题意:给定一个数,把他用英文表示

    思路:具体可见代码注释

    思想:字符串的处理

    复杂度:时间O(n),空间O(n)

    class Solution {
        String[] v1 = {"","Thousand", "Million", "Billion"};
        String[] v2 = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
        String[] v3 = {"", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
        public String numberToWords(int num) {
            // num为0
            if(num == 0)
                return "Zero";
            
            String res = "";
            int i = 0;
            // 每次取末尾的3位数,直到num为0
            while(num > 0) {
                int cur = num % 1000;
                num /= 1000;
                // 末尾的3位数不为0
                if(cur != 0) {
                    res = get(cur) + " " + v1[i] + " " + res;
                }
                i++;
            }
            // 结果去除空格
            return res.trim();
        }
        // 生成
        String get(int cur) {
            // 获取百位,十位和个位的数字
            int n1 = cur % 10;
            int n2 = cur / 10 % 10;
            int n3 = cur /100 % 10;
            String temp = "";
            // 百位不为0
            if(n3 != 0) {
                temp += v2[n3] + " " + "Hundred";
            }
            // 十位为0
            if(n2 != 0) {
                // 十位如果是1
                if(n2 == 1) {
                    temp = temp + " " + v2[cur%100];
                    return temp.trim();
                } 
                temp = temp + " " + v3[n2];
            }
            // 个位不为0
            if(n1 != 0) {
                temp = temp + " " + v2[n1];
            }
            // 结果去除空格
            return temp.trim();
        }
    }
    

    相关文章

      网友评论

        本文标题:力扣 273 移动零

        本文链接:https://www.haomeiwen.com/subject/eubhjktx.html