新增五个LeetCode算法题的解决方案
- 添加了LeetCode12(整数转罗马数字)的解决方案 - 添加了LeetCode13(罗马数字转整数)的解决方案 - 添加了LeetCode57(插入区间)的解决方案 - 添加了LeetCode92(反转链表的一部分)的解决方案 - 添加了LeetCode124(二叉树最大路径和)的解决方案
This commit is contained in:
parent
b3c66df7da
commit
fd440507c4
@ -0,0 +1,40 @@
|
|||||||
|
package cn.whaifree.redo.redo_all_240924;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/10/6 11:12
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode12 {
|
||||||
|
@Test
|
||||||
|
public void test(){
|
||||||
|
Solution solution = new Solution();
|
||||||
|
String s = solution.intToRoman(1994);
|
||||||
|
System.out.println(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class Solution{
|
||||||
|
// 每个标准-前一个 9 5 4 1
|
||||||
|
int[] nums = new int[] { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
|
||||||
|
String[] romans = new String[] { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
|
||||||
|
public String intToRoman(int num) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
while (num > 0) {
|
||||||
|
for (int i = 0; i < nums.length; i++) {
|
||||||
|
if (num >= nums[i]) {
|
||||||
|
sb.append(romans[i]);
|
||||||
|
num -= nums[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (num == 0) break;
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
package cn.whaifree.redo.redo_all_240924;
|
||||||
|
|
||||||
|
import cn.whaifree.leetCode.model.TreeNode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/10/6 12:22
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode124 {
|
||||||
|
class Solution {
|
||||||
|
|
||||||
|
int max = Integer.MIN_VALUE;
|
||||||
|
public int maxPathSum(TreeNode root) {
|
||||||
|
if (root == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int left = maxPathSum(root.left);
|
||||||
|
if (left < 0) {
|
||||||
|
// 不采纳左边的
|
||||||
|
left = 0;
|
||||||
|
}
|
||||||
|
int right = maxPathSum(root.right);
|
||||||
|
if (right < 0) {
|
||||||
|
right = 0;
|
||||||
|
}
|
||||||
|
max = Math.max(max, left + right + root.val);
|
||||||
|
return Math.max(left, right) + root.val; // 一个节点只能选择一条路,左路或者右路
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,51 @@
|
|||||||
|
package cn.whaifree.redo.redo_all_240924;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/10/6 11:32
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode13 {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
Solution solution = new Solution();
|
||||||
|
System.out.println(solution.romanToInt("MCMXCIV"));
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
static Map<Character, Integer> map;
|
||||||
|
static {
|
||||||
|
map = new HashMap<>();
|
||||||
|
map.put('I', 1);
|
||||||
|
map.put('V', 5);
|
||||||
|
map.put('X', 10);
|
||||||
|
map.put('L', 50);
|
||||||
|
map.put('C', 100);
|
||||||
|
map.put('D', 500);
|
||||||
|
map.put('M', 1000);
|
||||||
|
}
|
||||||
|
public int romanToInt(String s) {
|
||||||
|
char[] charArray = s.toCharArray();
|
||||||
|
|
||||||
|
int res = 0;
|
||||||
|
for (int i = s.length() - 1; i >= 0; i--) {
|
||||||
|
char c = charArray[i];
|
||||||
|
Integer v = map.get(c);
|
||||||
|
if (i > 0 && v > map.get(charArray[i - 1])) {
|
||||||
|
v -= map.get(charArray[i - 1]);
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
res += v;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
package cn.whaifree.redo.redo_all_240924;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/10/6 11:49
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode57 {
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
/**
|
||||||
|
* | | | | | |
|
||||||
|
* | |
|
||||||
|
*
|
||||||
|
* @param intervals
|
||||||
|
* @param newInterval
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int[][] insert(int[][] intervals, int[] newInterval) {
|
||||||
|
int[][] res = new int[intervals.length + 1][2];
|
||||||
|
int i = 0;
|
||||||
|
int index = 0;
|
||||||
|
// 找到newInterval的左边界位置
|
||||||
|
while (intervals[index][0] < newInterval[0]) {
|
||||||
|
res[i++] = intervals[index];
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
// 此时index的value >= newInterval的起始位置
|
||||||
|
|
||||||
|
// 找到newInterval右边边界位置
|
||||||
|
while (intervals[index][1] <= newInterval[1]) {
|
||||||
|
newInterval[0] = Math.min(newInterval[0], intervals[index][0]);
|
||||||
|
newInterval[1] = Math.max(newInterval[1], intervals[index][1]);
|
||||||
|
index ++;
|
||||||
|
}
|
||||||
|
|
||||||
|
res[i++] = newInterval;
|
||||||
|
// 把newInterval右边界右边的位置全部移动过来
|
||||||
|
while (index < intervals.length) {
|
||||||
|
res[i++] = intervals[index];
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
return Arrays.copyOf(res, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,59 @@
|
|||||||
|
package cn.whaifree.redo.redo_all_240924;
|
||||||
|
|
||||||
|
import cn.whaifree.leetCode.model.ListNode;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/10/6 12:07
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode92 {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
ListNode listNode = ListNode.listNodeFromArray(new int[]{1, 2, 3, 4, 5});
|
||||||
|
|
||||||
|
ListNode listNode1 = new Solution().reverseBetween(listNode, 1, 5);
|
||||||
|
listNode1.printList();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
public ListNode reverseBetween(ListNode head, int left, int right) {
|
||||||
|
ListNode pre = new ListNode(-1, head);
|
||||||
|
ListNode index = pre;
|
||||||
|
for (int i = 0; i < left - 1; i++) {
|
||||||
|
index = index.next;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListNode revHead = index.next;
|
||||||
|
ListNode indexB = pre;
|
||||||
|
for (int i = 0; i < right; i++) {
|
||||||
|
indexB = indexB.next;
|
||||||
|
}
|
||||||
|
ListNode revTail = indexB;
|
||||||
|
ListNode after = indexB.next;
|
||||||
|
// 逆转revHead到revTail
|
||||||
|
|
||||||
|
ListNode reverse = reverse(null, revHead, right - left + 1);
|
||||||
|
index.next = reverse;
|
||||||
|
revHead.next = after;
|
||||||
|
return pre.next;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ListNode reverse(ListNode pre, ListNode after,int k) {
|
||||||
|
if (after == null) {
|
||||||
|
return pre;
|
||||||
|
}
|
||||||
|
if (k == 0) {
|
||||||
|
return pre;
|
||||||
|
}
|
||||||
|
ListNode tmp = after.next;
|
||||||
|
after.next = pre;
|
||||||
|
return reverse(after, tmp, k - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user