LeetCode 13 java

题目描述

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
LeetCode 13 java_第1张图片

示例

输入:“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%可见高效

你可能感兴趣的:(领扣)