CodeTop每日系列三题------------------2021.1.20

LC836. 矩形重叠
// 如果两个矩阵面积都为0那么返回false即可。但如果两个面积都大于0,我们就需要判断他们是否有重叠的部分,将rec2固定以后,将rec1的置于rec2的左边上边右边和下边 并且最大值不能超过左右下角的边界值。(数学题)
在这里插入图片描述

class Solution {
    public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
        if(rec1[0] == rec1[2] || rec1[1] == rec1[3] || rec2[0] == rec2[2] || rec2[1] == rec2[3]){
            return false;
        }
        return !(rec1[2] <= rec2[0]|| //left
                rec1[0] >= rec2[2] || //right
                rec1[1] >= rec2[3] || //top
                rec1[3] <= rec2[1]);  //bottom
    }
}

LC12. 整数转罗马数字
//贪心算法,我们将所有罗马的情况列举出来并且对应value值,从最大的值开始递减循环迭代,每次都取最大的那个value那么出来的res肯定是正确的。(贪心法则:我们每次尽量使用最大的数来表示。)
在这里插入图片描述

class Solution {
    public String intToRoman(int num) {
        int[] values = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
        String[] roma = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        StringBuffer res = new StringBuffer();
        for(int i = 0;i < values.length;i++){
            while(num >= values[i]){
                res.append(roma[i]);
                num -= values[i];
            }
        }
        return res.toString();
    }
}

在这里插入图片描述
LC两数之和(链表经典面试题)
//不记得第几次做了,还是有点迷糊依稀记得有个carry进制位并且如何进行遍历的条件也很含糊。记得需要添加头节点,其实就是个位就是位于链表的首部,我们只需要从两链表头部进行一个遍历操作即可,只要其中一个链表不为空我们就可以进入循环,当然在循环当中处理完当前节点的结果以后需要判断当前的链表节点是否为空如果为空我们就不能跳入 next域
在这里插入图片描述

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode dummy = new ListNode(0);
        ListNode cur = dummy;
        int carry = 0;
        while(l1 != null || l2 != null){
            int x = l1 == null ? 0 : l1.val;
            int y = l2 == null ? 0 : l2.val;

            int sum = x + y + carry;
            carry = sum / 10;
            sum = sum % 10;

            cur.next = new ListNode(sum);
            cur = cur.next;
            if(l1 != null) l1 = l1.next;
            if(l2 != null) l2 = l2.next;
        }
        if(carry == 1)
        cur.next = new ListNode(carry);
        return dummy.next;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

破晓以胜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值