1. 程式人生 > 其它 >【Leetcode】273. Integer to English Words

【Leetcode】273. Integer to English Words

技術標籤:LC 棧、佇列、串及其他資料結構leetcode字串演算法

題目地址:

https://leetcode.com/problems/integer-to-english-words/

將一個十進位制 32 32 32位非負整數轉為其英語表達。

先開個函式專門求一下一個 1 ∼ 999 1\sim 999 1999的英文表達,然後對原數拆解為多少個billion,多少個million和多少個thousand,最後拼接起來。程式碼如下:

public class Solution {
    
    private String[] n0_19 = {
            "Zero"
, "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen"
, "Sixteen", "Seventeen", "Eighteen", "Nineteen"}; private String[] n20_90 = { "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"
}; private String[] n1000 = {" Billion ", " Million ", " Thousand ", ""}; public String numberToWords(int num) { if (num == 0) { return "Zero"; } StringBuilder sb = new StringBuilder(); for (int i = (int) 1e9, j = 0; i >= 1; i /= 1000, j++) { if (num >= i) { sb.append(get(num / i)).append(n1000[j]); num %= i; } } if (sb.charAt(sb.length() - 1) == ' ') { sb.setLength(sb.length() - 1); } return sb.toString(); } // 得到1~999的英文表示 private String get(int x) { StringBuilder sb = new StringBuilder(); if (x >= 100) { sb.append(n0_19[x / 100]).append(" Hundred "); x %= 100; } if (x >= 20) { sb.append(n20_90[x / 10 - 2]).append(' '); x %= 10; if (x != 0) { sb.append(n0_19[x]); } } else if (x > 0) { // 如果是0的話是不要將“Zero”拼在後面的 sb.append(n0_19[x]); } if (sb.charAt(sb.length() - 1) == ' ') { sb.setLength(sb.length() - 1); } return sb.toString(); } }

時空複雜度 O ( 1 ) O(1) O(1)