DOJO004

  • Dashool 創辦人
  • 喜歡調酒
  • Rails、Nextjs、TypeScript

來刷 LeetCode 吧! 09 13. Roman to Integer

LeetCode

題目分析 

將羅馬數字轉換為整數。 
需要注意 4、9、40、90、400、900 的表示方式。 

第一直覺 

直接暴力破解,用 for 迴圈遍歷整個字串,在使用 if 判斷。 
當 s[ i ] 為多少的判斷: 
  • s[ i ] = “I” = 1 
    • s[ i + 1 ] = “V” = 4
    • s[ i + 1] = “X” = 9
  • s[ i ] = “V” = 5
  • s[ i ] = “X” = 10 
    • s[ i + 1 ] = “L” = 40
    • s[ i + 1 ] = “C” = 90
  • s[ i ] = “L” = 50
  • s[ i ] = “C” = 100 
    • s[ i + 1 ] = “D” = 400
    • s[ i + 1 ] = = “M” = 900
  • s[ i ] = “D” = 500
  • s[ i ] = “M” = 1000

var romanToInt = function (s) {
  let sum = 0;

  for (let i = 0; i < s.length; i++) {
    if (s[i] === "I") {
      if (s[i + 1] === "V") {
        sum += 4;
        i++;
      } else if (s[i + 1] === "X") {
        sum += 9;
        i++;
      } else {
        sum += 1;
      }
    } else if (s[i] === "V") {
      sum += 5;
    } else if (s[i] === "X") {
      if (s[i + 1] === "L") {
        sum += 40;
        i++;
      } else if (s[i + 1] === "C") {
        sum += 90;
        i++;
      } else {
        sum += 10;
      }
    } else if (s[i] === "L") {
      sum += 50;
    } else if (s[i] === "C") {
      if (s[i + 1] === "D") {
        sum += 400;
        i++;
      } else if (s[i + 1] === "M") {
        sum += 900;
        i++;
      } else {
        sum += 100;
      }
    } else if (s[i] === "D") {
      sum += 500;
    } else if (s[i] === "M") {
      sum += 1000;
    }
  }
  return sum;
};

優化寫法

 
我們自己建立一個 “”map” 做資料的檢索。
 
並且判斷 s[ i ] 是否大於 s[ i + 1]。
 
var romanToInt = function (s) {
  const map = {
    I: 1,
    V: 5,
    X: 10,
    L: 50,
    C: 100,
    D: 500,
    M: 1000,
  };

  let result = 0;

  for (let i = 0; i < s.length; i++) {
    if (map[s[i]] < map[s[i + 1]]) {
      result -= map[s[i]];
    } else {
      result += map[s[i]];
    }
  }

  return result;
};

版權所有 © 2023 DOJO004

Deployed on Zeabur