跳槽记录【Leetcode算法题篇】273. Integer to English Words

今天开始对自己的跳槽过程做个记录吧。主要是因为在上课的过程中有人提到最好自己写技术博客,这样方便自己回顾和复习,同时可以尝试把思路讲清楚。

已经刷了一段时间的题了,主要针对的是Facebook的面试题。现在想想,当时接了Facebook的offer是不是就不用再刷了。。。诶但也没办法假设。。。人生经历就是各种各样的机缘巧合。。。

针对安卓方面的学习/复习,会单开一篇。这篇主要把自己做题学习和实践的做法思路写出来。

273Integer to English Words:https://leetcode.com/problems/integer-to-english-words/ 

算法思路:

  1. 使用三个String array处理20以下数字,10、20、30...90的数字和千位数:

     

    private String[] UNDER_TWENTY = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
    
    private String[] TENS = {"", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
    
    private String[] THOUSANDS = {"", "Thousand", "Million", "Billion", "Trillion"};

     

  2. 创建helper function处理千位以内的数字

  3. 调用helper function加入千位array里面的单位("", "Thousand", "Million", "Billion", "Trillion");

注意事项:

  1. helper function里面,hardcode “hundred”的String;

  2. 学会自调用helper()小于20的情况来处理大于20的数字(20-99,100-999);

  3. helper function后面注意加空格“ ”;

  4. 注意在调用helper()的时候,check "num%1000 != 0",这样可以避免1,000,000这样的数字还有Thousand加在里面;

最终代码:

class Solution {
    private String[] UNDER_TWENTY = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
    private String[] TENS = {"", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
    private String[] THOUSANDS = {"", "Thousand", "Million", "Billion", "Trillion"};
    public String numberToWords(int num) {
        if(num == 0) {
            return "Zero";
        }
        // handle Thousands with helper;
        String res = "";
        int index = 0;
        // 234, 212, 345, 678
        while(num != 0) {
            if(num % 1000 != 0) {
                String currentVal = res.toString();
                res = helper(num%1000) + THOUSANDS[index] + " " + res;
            }
            num /= 1000;
            index++;
        }
    
        return res.trim();
    }
    
    // handle numbers smaller than 1000;
    private String helper(int num) {
        if(num == 0) {
            return "";
        } else if (num < 20) {
            return UNDER_TWENTY[num] + " "; 
        } else if (num < 100) {// 20 -> 99: e.g. 84 -> TENS[num/10] + " " + UNDER_TWENTY[num%10]; 
            // 30 -> 
            return TENS[num/10] + " " + helper(num%10); 
        } else { // //100 -> 999 -> 365 -> UNDER_TWENTRY[num/100] + " Hundred " + helper(num%100);
            return  UNDER_TWENTY[num/100] + " Hundred " + helper(num%100);
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值