力扣第十三题

public int romanToInt(String s) {
       
		Map<String, Integer> map = new HashMap<String, Integer>();
        map.put("M",1000);
        map.put("CM",900);
        map.put("D",500);
        map.put("CD",400);
        map.put("C",100);
        map.put("XC",90);
        map.put("L",50);
        map.put("XL",40);
        map.put("X",10);
        map.put("IX",9);
        map.put("V",5);
        map.put("IV",4);
        map.put("I",1);
        int front=0;
        int num=0;
        int len=s.length();
        
       String cur,curb;//分别存储前后字符
       if(len==1){
           cur=s.substring(front);
           num+=map.get(cur);return num;
       }
        for(int behind=1;behind<len;behind++){
        	
        	front=behind-1;
        	cur=s.substring(front,front+1);// 得到前字符
        	curb=s.substring(behind,behind+1); //得到后字符
            if(map.get(cur)<map.get(curb)) {
            	String piece= s.substring(front,behind+1);
            	num+=map.get(piece);
            	behind++;
                if(behind==len-1) {//behind++后还需判断重新开始for循环会不会出界
            	front=len-1;
            	cur=s.substring(front);
            	num+=map.get(cur);
            }
            }else if(behind==len-1) {
				num+=map.get(cur);
				num+=map.get(curb);
			}else{
				
				num+=map.get(cur);
					
			}
            
            
        }
        return num;
    
    }

上面是未看题解写的代码,逻辑挺简单,只是代码较难阅读。

官方题解以后补上

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值