本文记录2022年四月份字节跳动三面的算法题目。

题目描述

把一个整数转成字符串(不考虑负数,整数单位最大为亿),举个例子:

123->一百二十三

1200345->一百二十万零三百四十五

思路

当时做的时候没仔细考虑,妈的上来就开始写,下面贴一下错误思路:

错误思路

建立两个字典,第一个字典存储0-10的数字,第二个字典存储(十、百、千、万、亿)的单位,通过不断取余拿到最后一个数字后查询字典然后进行字符串拼接,这种思路问题有两个:

  1. 不好处理取余后数字为0的情况(需要加一堆if)
  2. 对于高位譬如12000000这种数字不能处理高位的数量,这个例子1200就取不出来

正确思路

先进行字典建立,字典建立过程和上述错误思路是一样的

然后把数字看成多个部分:

  1. 大于1亿的
  2. 大于1万但小于1亿的
  3. 大于1千但小于1万的
  4. 大于1百但小于1千的
  5. 大于20但小于100的
  6. 大于10但小于20的
  7. 0到10

通过对不同部分的单位进行取整得到当前单位的数量,然后在对余数部分进行递归操作,中间当然也要处理取余和取整结果为0的情况。

举个例子:

对于120103206789 这个数字

先对亿取整后为1201,取余后为3206789,字符串为1201亿

再对3206789进行万取整后为320、取余后为6789

6789对千取整为6、取余为789

789对百取整为7、取余为89

89对10取整为8、取余为9

代码

代码更新在我的Github中

整数转字符串源码