LeetCode 面试题 16.08. 整数的英语表示

这篇具有很好参考价值的文章主要介绍了LeetCode 面试题 16.08. 整数的英语表示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、题目

  给定一个整数,打印该整数的英文描述。

示例 1:

输入: 123
输出: “One Hundred Twenty Three”

示例 2:

输入: 12345
输出: “Twelve Thousand Three Hundred Forty Five”

示例 3:

输入: 1234567
输出: “One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven”

示例 4:

输入: 1234567891
输出: “One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One”

  点击此处跳转题目。

二、C# 题解

  由于英文数字表示的特点,将整数每隔 3 位分为一组,从右到左分别对应 “Zero”, “Thousand”, “Million”, “Billion”。因此,现在只需要求解 1 ~ 999 的英文表示,记为 sw(SmallWord)。

  • 1 - 20:特殊部分,无规律。
  • 100 以内整十:特殊部分,无规律。
  • 非整十二位数:整十部分 + 个位数。
  • 100 - 999:整百部分 + 二位数。

  因此,所有整数可以表示为:
s w   ( B i l l i o n )   ∣   s w   ( M i l l i o n )   ∣   s w   ( T h o u s a n d )   ∣   s w sw\ (Billion) \ |\ sw \ (Million) \ |\ sw \ (Thousand) \ |\ sw sw (Billion)  sw (Million)  sw (Thousand)  sw

  如果 sw 为 “”,其对应括号内的内容不显示。文章来源地址https://www.toymoban.com/news/detail-735286.html

public class Solution {
    private static string[] Words0_9 = {
        "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine",
    };

    private static string[] Words10_19 = {
        "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen",
    };

    private static string[] Words_x0 = { // 整十数
        "", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety",
    };

    private static string[] Words_Huge = {
        "", "Thousand", "Million", "Billion",
    };

    private static string Word_100 = "Hundred";

    public string NumberToWords(int num) {
        if (num == 0) return Words0_9[0];
        int           cnt = 0;
        StringBuilder ans = new StringBuilder();
        while (num != 0) {
            StringBuilder sw = SmallNumberToWords(num % 1000); // 计算当前组的英文 sw
            if (sw.Length != 0)                                // sw 不为空,则与之前的结果进行拼接
                ans = Union(sw, new StringBuilder(Words_Huge[cnt]), ans);
            num /= 1000; // num 进入下一组
            cnt++;
        }
        return ans.ToString();
    }

    // 返回 1 ~ 999 的英文单词
    public StringBuilder SmallNumberToWords(int num) {
        return num switch {
            >= 1000 => new StringBuilder("Wrong"),
            >= 100  => Union(new StringBuilder(Words0_9[num / 100]), new StringBuilder(Word_100), SmallNumberToWords(num % 100)),
            >= 20   => Union(new StringBuilder(Words_x0[num / 10]), SmallNumberToWords(num % 10)),
            >= 10   => new StringBuilder(Words10_19[num - 10]),
            _       => new StringBuilder(num > 0 ? Words0_9[num] : "")
        };
    }

    // 拼接字符串
    private StringBuilder Union(params StringBuilder[] str) {
        StringBuilder ans = str[0];
        for (int i = 1; i < str.Length; i++) {
            if (str[i].Length == 0) continue;     // 如果字符串为空,则直接跳过
            if (ans.Length != 0) ans.Append(' '); // 已有的字符不为空,则需要在中间加入一个空格
            ans.Append(str[i]);
        }
        return ans;
    }
}
  • 时间:60 ms,击败 100.00% 使用 C# 的用户
  • 内存:36.24 MB,击败 100.00% 使用 C# 的用户

到了这里,关于LeetCode 面试题 16.08. 整数的英语表示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode 面试题 04.08. 首个共同祖先

      设计并实现一个算法,找出二叉树中某两个节点的第一个共同祖先。不得将其他的节点存储在另外的数据结构中。注意:这不一定是二叉搜索树。   例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]   点击此处跳转题目。 示例 1: 输入: root = [3,5,1,6,2,0,8,null,null,7,

    2024年02月08日
    浏览(38)
  • LeetCode 面试题 17.08 —— 马戏团人塔

    首先,我们对人的身高按照从小到大排序, 特别注意,对于身高相等的人,要按照体重从高到低排序 。这时候,序列已经满足了在上面的人要比下面的人矮一点,然后,我们只需要保证提取到一个最长的体重的上升子序列即可。这一步骤也就是 LeetCode 300——最长上升子序列

    2024年04月28日
    浏览(29)
  • 【每日一题】Leetcode - 面试题 17.08. Circus Tower LCCI

    Leetcode - 面试题 17.08. Circus Tower LCCI Sorting heights to be ascending order and weights to be descending order. dp[i] = j represents person[i] as the bottom of tower, the tower height is amount of j, to calculate the dp[i] we find the maximum of dp[0 ~ (i-1)] what the person[0 ~ (i-1)] shorter and lighter than person[i], increase it of one, it’s th

    2024年02月13日
    浏览(44)
  • LeetCode 面试题 16.14. 最佳直线

      给定一个二维平面及平面上的 N 个点列表 Points ,其中第 i 个点的坐标为 Points[i]=[Xi,Yi] 。请找出一条直线,其通过的点的数目最多。   设穿过最多点的直线所穿过的全部点编号从小到大排序的列表为 S ,你仅需返回 [S[0],S[1]] 作为答案,若有多条直线穿过了相同数量的

    2024年02月06日
    浏览(38)
  • LeetCode 面试题 16.06. 最小差

      给定两个整数数组 a 和 b ,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差 示例: 输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8} 输出:3,即数值对(11, 8) 提示: 1 = a.length, b.length = 100000 -2147483648 = a[i], b[i] = 2147483647 正确结果在区间 [0, 2147483647

    2024年02月08日
    浏览(31)
  • LeetCode 面试题 16.19. 水域大小

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/group-anagrams/description/ 博主Github :https://github.com/GDUT-Rp/LeetCode 你有一个用于表示一片土地的整数矩阵land,该矩阵中每个点的值代表对应地点的海拔高度。若值为0则表示水域。由垂直、水平或对角连接的水域为池塘。池塘的大

    2024年02月10日
    浏览(45)
  • LeetCode 面试题 16.17. 连续数列

      给定一个整数数组,找出总和最大的连续数列,并返回总和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。   点击此处跳转题目。   使用动态

    2024年02月05日
    浏览(37)
  • 3-【斐波那契数列模型】LeetCode面试题08.01-三步问题

    题目 三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。 示例1: 输入:n = 3  输出:4 说明: 有四种走法 示例2: 输入:n = 5 输出:13 提示:n范围在[1, 1000

    2024年02月05日
    浏览(41)
  • 【手撕算法|动态规划系列No.2】leetcode面试题 08.01. 三步问题

    个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助 🍓希望我们一起努力、成长,共同进步。

    2024年02月12日
    浏览(64)
  • LeetCode讲解篇之面试题 16.25. LRU 缓存

    设计和构建一个“最近最少使用”缓存,该缓存会删除最近最少使用的项目。缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。当缓存被填满时,它应该删除最近最少使用的项目。 它应该支持以下操作: 获取数据 get 和 写入数据 put 。

    2024年02月09日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包