首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode 273. 整數轉英文單詞:分組處理與邊界情況完整攻略

     編輯:關於C++

題目要求

將非負整數(< 2³¹)轉為英文單詞表示。例:123 → "One Hundred Twenty Three",12345 → "Twelve Thousand Three Hundred Forty Five"。

核心策略:三位一組 + 單位後綴

從低位起,每 3 位為一組,對應單位:"", "Thousand", "Million", "Billion"。處理每組三位數(0-999),非零時拼接單位。

三位數轉英文輔助函數

= 100) {
        sb.append(below10[num / 100]).append(" Hundred");
        num %= 100;
        if (num > 0) sb.append(" ");
    }
    if (num >= 20) {
        sb.append(tens[num / 10]);
        num %= 10;
        if (num > 0) sb.append(" ").append(below10[num]);
    } else if (num >= 10) {
        sb.append(below20[num - 10]);
    } else if (num > 0) {
        sb.append(below10[num]);
    }
    return sb.toString();
}

主流程

 0; ++i) {
        int chunk = num % 1000;
        if (chunk > 0) {
            String chunkStr = convertHundred(chunk);
            if (i > 0) chunkStr += " " + units[i];
            if (res.length() > 0) chunkStr += " " + res;
            res = new StringBuilder(chunkStr);
        }
        num /= 1000;
    }
    return res.toString();
}

關鍵邊界情況

  • 0 → 直接返回 "Zero"。
  • 中間組為 0 不輸出單位:1000010 → "One Million Ten"(無 Thousand)。
  • 空格處理:組內、組與單位、組之間恰好一個空格,首尾無空格。
  • 大小寫:題目要求首字母大寫,其餘小寫。

複雜度

  • 時間:O(log₁₀₀₀ n) = O(1),最多 4 組(2³¹ < 10¹⁰)。
  • 空間:O(1) 輸出字符串除外。

擴展:支援更大數

擴展 units 數組添加 "Trillion", "Quadrillion" 等,配合 long 或 BigInteger 即可處理任意大小整數。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved