1. /**
    2. * 21、合并两个有序链表
    3. *
    4. * @param l1
    5. * @param l2
    6. * @return
    7. */
    8. public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    9. // 变量初始值
    10. ListNode result = new ListNode(-1);
    11. // 变量指针指向同一个地址
    12. ListNode item = result;
    13. while (l1 != null && l2 != null) {
    14. if (l1.val < l2.val) {
    15. item.next = l1;
    16. l1 = l1.next;
    17. } else {
    18. item.next = l2;
    19. l2 = l2.next;
    20. }
    21. item = item.next;
    22. }
    23. item.next = l1 == null ? l2 : l1;
    24. return result.next;
    25. }
    26. /**
    27. * 20、有效的括号
    28. * 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
    29. * 有效字符串需满足:
    30. * 左括号必须用相同类型的右括号闭合。
    31. * 左括号必须以正确的顺序闭合。
    32. *
    33. * @param s
    34. * @return
    35. */
    36. public static boolean isValid(String s) {
    37. if (s.length() <= 1) {
    38. return false;
    39. }
    40. Map map = new HashMap<String, String>();
    41. map.put("(", ")");
    42. map.put("[", "]");
    43. map.put("{", "}");
    44. char[] chars = s.toCharArray();
    45. Stack stack = new Stack<String>();
    46. for (char item : chars) {
    47. if ('(' == item || '[' == item || '{' == item) {
    48. stack.push(String.valueOf(item));
    49. } else if (')' == item || ']' == item || '}' == item) {
    50. if (stack.empty()) {
    51. return false;
    52. }
    53. String top = (String) stack.pop();
    54. if (null == top) {
    55. return false;
    56. }
    57. if (!String.valueOf(item).equals(map.get(top))) {
    58. return false;
    59. }
    60. } else {
    61. return false;
    62. }
    63. }
    64. if (stack.empty()) {
    65. return true;
    66. } else {
    67. return false;
    68. }
    69. }
    70. /**
    71. * 13、罗马数字转整数
    72. *
    73. * @param s
    74. * @return
    75. */
    76. public static int romanToInt(String s) {
    77. if (s.length() > 15) {
    78. return 0;
    79. }
    80. int result = 0;
    81. char[] chars = s.toCharArray();
    82. for (int i = 0; i < chars.length; i++) {
    83. int item = getSignNumber(chars[i]);
    84. if (i != (chars.length - 1) && item < getSignNumber(chars[i + 1])) {
    85. result -= item;
    86. } else {
    87. result += item;
    88. }
    89. }
    90. return result;
    91. }
    92. /**
    93. * 13、罗马数字转整数-方法获取符合对应值
    94. *
    95. * @param sign
    96. * @return
    97. */
    98. public static int getSignNumber(char sign) {
    99. switch (sign) {
    100. case 'I':
    101. return 1;
    102. case 'V':
    103. return 5;
    104. case 'X':
    105. return 10;
    106. case 'L':
    107. return 50;
    108. case 'C':
    109. return 100;
    110. case 'D':
    111. return 500;
    112. case 'M':
    113. return 1000;
    114. default:
    115. return 0;
    116. }
    117. }