/**
* 21、合并两个有序链表
*
* @param l1
* @param l2
* @return
*/
public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
// 变量初始值
ListNode result = new ListNode(-1);
// 变量指针指向同一个地址
ListNode item = result;
while (l1 != null && l2 != null) {
if (l1.val < l2.val) {
item.next = l1;
l1 = l1.next;
} else {
item.next = l2;
l2 = l2.next;
}
item = item.next;
}
item.next = l1 == null ? l2 : l1;
return result.next;
}
/**
* 20、有效的括号
* 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
* 有效字符串需满足:
* 左括号必须用相同类型的右括号闭合。
* 左括号必须以正确的顺序闭合。
*
* @param s
* @return
*/
public static boolean isValid(String s) {
if (s.length() <= 1) {
return false;
}
Map map = new HashMap<String, String>();
map.put("(", ")");
map.put("[", "]");
map.put("{", "}");
char[] chars = s.toCharArray();
Stack stack = new Stack<String>();
for (char item : chars) {
if ('(' == item || '[' == item || '{' == item) {
stack.push(String.valueOf(item));
} else if (')' == item || ']' == item || '}' == item) {
if (stack.empty()) {
return false;
}
String top = (String) stack.pop();
if (null == top) {
return false;
}
if (!String.valueOf(item).equals(map.get(top))) {
return false;
}
} else {
return false;
}
}
if (stack.empty()) {
return true;
} else {
return false;
}
}
/**
* 13、罗马数字转整数
*
* @param s
* @return
*/
public static int romanToInt(String s) {
if (s.length() > 15) {
return 0;
}
int result = 0;
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
int item = getSignNumber(chars[i]);
if (i != (chars.length - 1) && item < getSignNumber(chars[i + 1])) {
result -= item;
} else {
result += item;
}
}
return result;
}
/**
* 13、罗马数字转整数-方法获取符合对应值
*
* @param sign
* @return
*/
public static int getSignNumber(char sign) {
switch (sign) {
case 'I':
return 1;
case 'V':
return 5;
case 'X':
return 10;
case 'L':
return 50;
case 'C':
return 100;
case 'D':
return 500;
case 'M':
return 1000;
default:
return 0;
}
}