1. 程式人生 > >LeetCode 13 java

LeetCode 13 java

題目描述

羅馬數字包含以下七種字元: I, V, X, L,C,D 和 M。
在這裡插入圖片描述

示例

輸入:“III”
輸出:3
詳情搜尋leetcode題目

程式碼
  public int romanToInt(String s) {
		int answer = 0;
		for (int i = 0; i < s.length(); i++) {
			if (s.charAt(i) == 'M')
				answer += 1000;
			if (s.charAt(i) == 'C') {
				if (i + 1 < s.length() &&
s.charAt(i + 1) == 'M') { answer -= 100; } else if (i + 1 < s.length() && s.charAt(i + 1) == 'D') { answer -= 100; } else answer += 100; } if (s.charAt(i) == 'D') { answer += 500; } if (s.charAt(i) == 'X') { if (i + 1 < s.length() && s.charAt
(i + 1) == 'C') { answer -= 10; } else if (i + 1 < s.length() && s.charAt(i + 1) == 'L') { answer -= 10; } else answer += 10; } if (s.charAt(i) == 'L') answer += 50; if (s.charAt(i) == 'I') { if (i + 1 < s.length() && s.charAt(i + 1) == 'X')
{ answer -= 1; } else if (i + 1 < s.length() && s.charAt(i + 1) == 'V') { answer -= 1; } else answer += 1; } if (s.charAt(i) == 'V') answer += 5; } return answer; }

第一次想的程式碼還沒進行優化,太多的if else判斷 程式效率較低,第二次我們換成了(字串的底層就是陣列)陣列 和 switch 關鍵是switch提高了程式的效率
程式如下

    public int romanToInt(String s) {
		if("".equals(s))
			return 0;
		char [] strlen = s.toCharArray();
		int answer = 0;
		for (int i = 0; i < strlen.length; i++) {
			switch (strlen[i]) {
			case 'M':
				answer += 1000;
				break;
			case 'C':
				if (i + 1 < strlen.length && strlen[i+1] == 'M') {
					answer -= 100;
				} else if (i + 1 < strlen.length && strlen[i+1] == 'D') {
					answer -= 100;
				} else {
					answer += 100;
				}
				break;
			case 'D':
				answer += 500;
				break;
			case 'X':
				if (i + 1 < strlen.length && strlen[i+1] == 'C') {
					answer -= 10;
				} else if (i + 1 < strlen.length && strlen[i+1] == 'L') {
					answer -= 10;
				} else {
					answer += 10;
				}
				break;
			case 'L':
				answer += 50;
				break;
			case 'I':
				if (i + 1 < strlen.length && strlen[i+1] == 'X') {
					answer -= 1;
				} else if (i + 1 < strlen.length &&strlen[i+1] == 'V') {
					answer -= 1;
				} else {
					answer += 1;
				}
				break;
			case 'V':
				answer += 5;
				break;
			}
		}

		return answer;
    }

程式碼判斷沒有改變,換成switch後 提升50ms達到了95%可見高效