LeetCode||罗马数字转整数

╰+哭是因爲堅強的太久メ 2023-05-31 12:12 83阅读 0赞

题目描述:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0pvY2tMaXU_size_16_color_FFFFFF_t_70

整体思路:

  • 1.将String转为char数组
  • 2.定义int变量num作为return的变量
  • 3.干扰正常计数的情况只有IV、IX、XL、XC、CD、CM六种,所以我们遍历char数组,注意这次遍历从i = 0到i = ch.length - 1,因为要判断ch[i+1]
  • 4.判断ch[i] 和 ch[i+1]的情况,假如满足IV或者IX,就把num-2,因为IV=4,比起正常的I + V要减少2,依次类推,碰到XL、XC需要num-20,碰到CD、CM需要num-200
  • 5.再次遍历数组,这回就只需要判断字母是什么,把num加上对应的值,例如 ch[i] = C; num += 100;

实现代码:

  1. class Solution {
  2. public int romanToInt(String s) {
  3. int n = s.length();
  4. int roman_int = 0;
  5. for(int i=0;i<n;i++)
  6. {
  7. switch(s.charAt(i))
  8. {
  9. case 'I' : roman_int = roman_int + 1;break;
  10. case 'V' : roman_int = roman_int + 5;break;
  11. case 'X' : roman_int = roman_int + 10;break;
  12. case 'L' : roman_int = roman_int + 50;break;
  13. case 'C' : roman_int = roman_int + 100;break;
  14. case 'D' : roman_int = roman_int + 500;break;
  15. case 'M' : roman_int = roman_int + 1000;break;
  16. default: System.out.println("default");break;
  17. }
  18. if(i!=0)
  19. {
  20. if(((s.charAt(i)=='V')||(s.charAt(i)=='X'))&&(s.charAt(i-1)=='I'))
  21. roman_int = roman_int-1*2;
  22. if(((s.charAt(i)=='L')||(s.charAt(i)=='C'))&&(s.charAt(i-1)=='X'))
  23. roman_int = roman_int-10*2;
  24. if(((s.charAt(i)=='D')||(s.charAt(i)=='M'))&&(s.charAt(i-1)=='C'))
  25. roman_int = roman_int-100*2;
  26. }
  27. }
  28. return roman_int;
  29. }
  30. }

发表评论

表情:
评论列表 (有 0 条评论,83人围观)

还没有评论,来说两句吧...

相关阅读