LeetCode 周赛-291

第一题1 问题描述 给你一个表示某个正整数的字符串 number 和一个字符 digit 。 从 number 中 恰好 移除 一个 等于 digit 的字符后,找出并返回按 十进制 表示 最大 的结果字符串。生成的测试用例满足 digit 在 number 中出现至少一次。 示例1: 输入:number = "123", digit = "3" 输出:"12" 解释:"123" 中只有一个 '3' ,在移除 '3' 之后,结果为 "12" 。 示例2: 输入:number = "1231", digit = "1" 输出:"231" 解释:可以移除第一个 '1' 得到 "231" 或者移除第二个 '1' 得到 "123" 。 由于 231 > 123 ,返回 "231" 。 示例3: 输入:number = "551", digit = "5" 输出:"51" 解释:可以从 "551" 中移除第一个或者第二个 '5' 。 两种方案的结果都是 "51" 。 提示:...

May 1, 2022 · Huo Haodong

阿拉伯数字转中文

初步想法 下面是一些将阿拉伯数字转为中文的例子: 0 = 零 10 = 十 1000 = 一千 9527 = 九千五百二十七 10051 = 一万零五十一 111111111 = 一亿一千一百一十一万一千一百一十一 一个最直观的想法就是按照从最低位到最高位的顺序,依次将数字映射为相应的中文字符并加上单位,比如: 0 = 零 10 = 一十零 1000 = 一千零百零十零 10051 = 一万零千零百五十一 110010 = 一十一万零千零百一十零 210010 = 二十一万零千零百一十零 但是这样的转换方法对于“零”的处理并不理想,我们中文的习惯一般是将连续出现的多个“零”合为一个,并去除末尾的“零”。因此我们需要对“零”进行单独处理。 此外,对于数字 110010 最高位的 11 而言,我们一般是读成“十一万”而不是“一十一万”,所以还应对位于开头的 10 ~ 19 之间的数字进行处理。 观察上面的例子也很容易注意到,按照这种朴素的处理方法,添加“万”、“亿”等特殊数位的时机也是一个棘手的问题。 通过上述分析可以看到,阿拉伯数字转中文并没有一个统一的规则,且因为中文的阅读习惯比较特殊,还应进行许多特殊处理。 算法设计与实现 以数字 123456789 为例,我们可以将数字从右到左按照每 4 位为一段进行单独处理,之后对每段处理后的结果进行拼接: 将 123456789 分为 1、2345、6789 三段,每段单独处理; 6789 = 六千 七百 八十 九,2345 = 二千 三百 四十 五,1 = 一; 对结果进行拼接,注意拼接的时候带上每段相应的数位,比如“万”和“亿”,拼接后为:一 亿 二千三百四十五 万 六千七百八十九。 按照这样的规则处理就可以解决“万”、“亿”等特殊单位的添加问题。...

March 13, 2022 · Huo Haodong

打印菱形

问题:输入一个奇数n,打印高度为n的菱形字符。 一日闲来无事,脑中灵光一现,突然想试试打印字符玩玩。传统的打印菱形字符的方法无外乎1.依次打印菱形的4个角。2.先打印菱形的上半部分,然后再打印下半部分。3.暴力徒手打印。网上的资料也大多依此思路实现。但是实现的代码往往雷同且有多个for循环,看起来十分别扭。 这里提供一个相对优雅的方法: * *** ***** *** * 观察上面的图像,可以看到每一行的空格数(只打印左边的空格,右边的无需打印)的规律符合函数:y = abs(x + 2),其中x从0~n-1,n为菱形的高度,x为行号,y为第x行对应的左边的空格数。 更一般的,将公式推广到一般的n也是成立的,这些通过在草纸上画出函数图像即可得出。这里不再赘述。 现在有了空格数,求所需打印的字符也便容易了,想象成一个正方形的盒子,每一行除了空格就是字符,现在知道了每一行左边的空格数y,那么这一行总共有2 * y个空格,且这一行总共有n个字符,那么所需打印的字符数便为n - 2 * y。有了公式,打印菱形的代码便很容易就可以写出: //打印菱形 public static void printRhombus(int height, char charShape) { for (int row = 0; row < height; row++) { int blankCount = Math.abs(-1 * row + (height - 1) / 2); int charCount = height - 2 * blankCount; for (int col = 0; col < blankCount; col++) { System....

April 12, 2020 · Huo Haodong