leetcode面试经典150题之整数转罗马数字(java语言)

       该题目就是一道简单的将罗马数字转化为整数的代码题目,题目说明如下:

 

      对于这道题目,我使用到的方法 ,是用到的了java中的StringBuilder类,在此,我只是讲解该题目,并不介绍StringBuilder类。对于这道题目,我们的解题目的思路,就是取取出它的每一位数字,然后将对应位置的数字转化为罗马数字,再进行拼接即可。我们应该都会知道如何取一个整数中每一位的数字,就是让该数经过一个while循环,让该数不断的除10,模10,直到该数字变为0为止,代码展示如下:

       但是对于这种代码,大家会发现一个问题,就是我每次取的数据都只能重低位置再到高位置,而我们要打印的该罗马数字肯定是从高位顺着输出的,但是这样并不影响的,我们可以使用StringBuilder中的reverse方法,该方法可以将字符串进行逆转。知道这一点后,我们就可以就先求出该罗马数字逆转后的数字,然后用reverse方法,讲其再进行一遍逆转,就能够求出原来的罗马数字,代码展示如下:

        紧接着,我们可以发现,数字转化位罗马数字时,每一位上的数字的转化规律其实都是相同的,也就是每一个数值都可以套用同一个求解方法,但是问题的重点在于由于每一位上的数字,它的位不同,所转化位罗马数字的字符也就不同,比如在个位上的6,对应的罗马数字是VI,而在十位上的六,由于它代表的是60,转化为罗马数字其实是LX,代码展示如下:

        那么我们该怎么解决这个问题呢,这时候其实我们就可以巧妙的借助数组来求解,我们创建一个char数组,将这些数字所对应的罗马符号从小到大的存放于该数组中,随后定义一个flag的位置,flag可以记录我们在取到每一个数字后,需将该数字转化为罗马数字所需要用到符号的位置,随后当我们要对下一个位的数字转化为罗马数字时,将该flag移动到下一个位置,这样问题就可以得到迎刃而解!值得注意的是,我们直接要先求出的是改罗马数字逆转后的结果,因此在我们将每一位转化为罗马数字的时候,每一位也是要转化为逆转后的结果,最后,完整代码展示如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值