整数转罗马数字---2022/01/12

题目描述
添整数转罗马数字
以下是首次实现的思考:

第一种方法,对应数字的方法。
考虑一位数的情况,可以用直接的数组;
考虑两位数的情况:
十位上的数值<4,数值对应有多少个X,剩下的按照一位数的情况来写
十位上的数值=4,对应XL,剩下的按照一位数的情况来写;
5<十位上的数值>9,数值对应有L加个(数值减5)个XX,剩下的按照一位数的情况来写
十位上的数值=9,对应XC,剩下的按照一位数的情况来写;
考虑三位数的情况:
百位上的数值<4,数值对应有多少个C,剩下的按照两位数的情况来写
百位上的数值=4,对应CD,剩下的按照两位数的情况来写;
5<百位上的数值>9,对应,数值对应有D加个(数值减5)个C,剩下的按照两位数的情况来写
百位上的数值=9,对应CM,剩下的按照两位数的情况来写;

考虑四位数的情况:
千位上的数值<4,数值对应有多少个M,剩下的按照三位数的情况来写

反思:1、需要动态变化的值设成标兵,不要用固定的值代替,比如决定位置的坐标不应该用原先数字长度来固定。
      而是随动态的数据长度来改变。
      2、1994出现错误,主要是max的影响,max=max*10;
      3、10出错,主要是因为即使是两位数,由于没有0的表示,所以要先判断,如果为0,直接len-1。
      4、60出错,主要是在构建val数组时大意了
      5、101出错,考虑10的数字时不够严谨,此时的len不应该由减1来决定,而是由动态的数字来决定,
         长度改变,max也要动态变化。

提交通过,但是性能很不乐观。
在这里插入图片描述
这里还有一种考虑:比较固定特殊数字对应字符的大小,不断做比较,字符叠加的操作。
实现代码如下:

public static String intToRoman(int num) {
    	
    	
    	int[] val= {1,4,5,9,10,40,50,90,100,400,500,900,1000};
    	String [] valtag= {"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"};
    	String res="";
    	int i=12;
    	while(num>0)
    	{	
    		if(num>=val[i])
	    	{
	    		res+=valtag[i];
	    		num-=val[i];
	    	}
    		else	
    		{
    			i--;
    		}
    		
    	}
    	
    	return res;

    }

时间上的性能有所提升,但是内存却没有。真不知道大佬们时如何节省内存的。
在这里插入图片描述
今天电脑卡得要死,python的代码实在卡得写不了。所以。。暂时就没有python版本的代码了。

而且今天很深的一个感悟,思路清楚的时候,好实现,性能也很好。但是如果没有一个很清晰的思路时,前行就会磕磕绊绊。这里并不是强调越快且简洁的就是好,而是:凡是都有一个过程,只有经过了磕磕绊绊,才能走出自己的道路。共勉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值