LeetCode 热题 100(五):54. 螺旋矩阵、234. 回文链表、21. 合并两个有序链表

这篇具有很好参考价值的文章主要介绍了LeetCode 热题 100(五):54. 螺旋矩阵、234. 回文链表、21. 合并两个有序链表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目一:

54. 螺旋矩阵https://leetcode.cn/problems/spiral-matrix/

题目要求:

LeetCode 热题 100(五):54. 螺旋矩阵、234. 回文链表、21. 合并两个有序链表,力扣刷题,leetcode,矩阵,算法

 思路:一定要先找好边界。如下图 ,上边界是1234,右边界是8、12,下边界是9、10、11,左边界是5,所以可以确定四个边界所包含的值。然后再循环一层一层往里进入,比如添加完上边界1234后,上边界就需要+1,即下沉到5678行,并与下边界做比较,如果下边界小于上边界,说明所有值都已经添加完毕了。

LeetCode 热题 100(五):54. 螺旋矩阵、234. 回文链表、21. 合并两个有序链表,力扣刷题,leetcode,矩阵,算法

代码:文章来源地址https://www.toymoban.com/news/detail-662845.html

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {

        List<Integer> list = new ArrayList<>();
        // 先拿到行数列数, 然后定义好四个边界
        int m = matrix.length;
        int n = matrix[0].length;
        int up = 0, down = m - 1, left = 0, right = n - 1;
        // 每次循环,列表list添加一个外层的数
        while (true){
            // 添加上边界的值,从左一直到最右边
            for (int i = left; i <= right; i++)
                list.add(matrix[up][i]);
                // 执行完毕后,将上边界下沉; 如果超过了下边界  说明都所有数都添加上了
                if (++up > down) break;
            // 添加右边界的值,从上到最下
            for (int i = up; i <= down; i++)
                list.add(matrix[i][right]);
                // 执行完毕后,将右边界左移; 如果小于左边界  说明都所有数都添加上了
                if (--right < left) break;
            // 添加下边界的值, 从右到最左
            for (int i = right; i >= left; i--)
                list.add(matrix[down][i]);
                // 执行完毕后,将下边界上移; 如果小于上边界  说明都所有数都添加上了
                if (--down < up) break;
            // 添加左边界的值, 从下到最上
            for (int i = down; i >= up; i--)
                list.add(matrix[i][left]);
                // 执行完毕后,将左边界右移; 如果大于右边界  说明都所有数都添加上了
                if (++left > right) break;
        }
        return list;
    }
}

注意:①注意for循环中,是要等于到达边界的,比如从左到右添加值时,一定是到达最右边

②添加了哪个边界的值,哪个边界就要向相反方向移动一次,而且必须是++或--先执行才有效

题目二:

234. 回文链表https://leetcode.cn/problems/palindrome-linked-list/题目要求:

LeetCode 热题 100(五):54. 螺旋矩阵、234. 回文链表、21. 合并两个有序链表,力扣刷题,leetcode,矩阵,算法

思路:直接对链表的值判断是否回文比较繁琐,可以先将链表的值复制到数组中,再使用双指针判断值是否回文。

代码:

class Solution {
    public boolean isPalindrome(ListNode head) {
        // 将链表的值复制到数组中
        List<Integer> vals = new ArrayList<Integer>();
        ListNode cur = head;
        while (cur != null){
            vals.add(cur.val);
            cur = cur.next;
        }

        // 双指针判断是否回文
        int l = 0;
        int r = vals.size() - 1;
        while (l < r){
            if (vals.get(l) != vals.get(r))
                return false;
            l++;
            r--;
        }
        return true;
    }
}

 题目三:

21. 合并两个有序链表https://leetcode.cn/problems/merge-two-sorted-lists/题目要求:

LeetCode 热题 100(五):54. 螺旋矩阵、234. 回文链表、21. 合并两个有序链表,力扣刷题,leetcode,矩阵,算法

 思路:递归。如果 l1 或者 l2 一开始就是空链表 ,那么没有任何操作需要合并,所以我们只需要返回非空链表。否则,我们要判断 l1 和 l2 哪一个链表的头节点的值更小,然后递归地决定下一个添加到结果里的节点。如果两个链表有一个为空,递归结束。

代码:

class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        if (list1 == null)
            return list2;
        else if (list2 == null)
            return list1;
        else if (list1.val < list2.val) {
            list1.next = mergeTwoLists(list1.next, list2);
            return list1;
        }
        else {
            list2.next = mergeTwoLists(list2.next, list1);
            return list2;
        }
    }
}

思路:也可以直接使用暴力解法。

代码:

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode prehead = new ListNode(-1);

        ListNode prev = prehead;
        while (l1 != null && l2 != null) {
            if (l1.val <= l2.val) {
                prev.next = l1;
                l1 = l1.next;
            } else {
                prev.next = l2;
                l2 = l2.next;
            }
            prev = prev.next;
        }

        // 合并后 l1 和 l2 最多只有一个还未被合并完,我们直接将链表末尾指向未合并完的链表即可
        prev.next = l1 == null ? l2 : l1;

        return prehead.next;
    }
}

到了这里,关于LeetCode 热题 100(五):54. 螺旋矩阵、234. 回文链表、21. 合并两个有序链表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 234. 回文链表、Leetcode的Python实现

     博客主页:🏆 看看是李XX还是李歘歘  🏆 🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺 💗 点关注不迷路,总有一些📖知识点📖是你想要的 💗 ⛽️今天的内容是      Leetcode    234. 回文链表      ⛽️💻💻💻 234. 回文链表 给你一个单链表的头

    2024年02月06日
    浏览(29)
  • leetcode 234.判断链表是否为回文

    给定一个单链表,判断它是否是回文。 输入: 1-2 输出: false 输入: 1-2-2-1 输出: true 判断链表是否为回文,可以通过翻转链表后半部分并比较两半部分是否相同来实现。具体步骤如下: 使用快慢指针找到链表的中间节点。 翻转链表的后半部分。 比较前半部分和翻转后的后半部

    2024年01月19日
    浏览(24)
  • 单链表OJ题:LeetCode--234.回文链表

    朋友们、伙计们,我们又见面了,今天给大家带来的是LeetCode中234题:回文链表 数据结构  :数据结构专栏 作       者  :stackY、 LeetCode:LeetCode刷题训练营 LeetCode--234.回文链表:https://leetcode.cn/problems/palindrome-linked-list/  牛客网 - OR36 - 链表的回文结构:https://www.nowcoder.co

    2024年02月04日
    浏览(35)
  • 【Leetcode】54.螺旋矩阵

    给你一个 m m m 行 n n n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例1:

    2024年02月15日
    浏览(33)
  • LeetCode刷题系列 -- 54. 螺旋矩阵

    给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入: matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出: [1,2,3,6,9,8,7,4,5] 示例 2: 输入: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出: [1,2,3,4,8,12,11,10,9,5,6,7] 提示: m == matrix.length n == matrix[i].length 1 =

    2023年04月08日
    浏览(31)
  • 算法leetcode|54. 螺旋矩阵(rust重拳出击)

    给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 m == matrix.length n == matrix[i].length 1 = m, n = 10 -100 = matrix[i][j] = 100 面对这道算法题目,二当家的再次陷入了沉思。 可以每次循环移动一步,判断移到边界就变换方向,巧用数组可以减少逻辑判断

    2024年02月08日
    浏览(37)
  • 剑指 Offer 29. 顺时针打印矩阵 / LeetCode 54. 螺旋矩阵(模拟)

    链接:剑指 Offer 29. 顺时针打印矩阵;LeetCode 54. 螺旋矩阵 难度:中等 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出:

    2024年02月15日
    浏览(31)
  • 【代码随想录 | Leetcode | 第四天】数组 | 螺旋矩阵 | 59-54

    欢迎来到小K的Leetcode|代码随想录|专题化专栏,今天将为大家带来螺旋矩阵的分享 ✨ 给你一个正整数 n ,生成一个包含 1 到 n 2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 示例 2: 提示: 思路: 本类型题目其实都不涉及什么算法,就是模拟

    2024年02月16日
    浏览(34)
  • LeetCode热题100——链表

    给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回

    2024年02月05日
    浏览(33)
  • LeetCode 热题 100 | 链表(上)

    目录 1  基础知识 1.1  空指针 1.2  结构体 1.3  指针访问 1.4  三目运算符 2  160. 相交链表 3  206. 反转链表 4  234. 回文链表 菜鸟做题第三周,语言是 C++ 1  基础知识 1.1  空指针 使用 nullptr 来判断是否为空指针: “NULL 在 C++ 中就是 0,这是因为在 C++ 中 void* 类型是不允许隐式

    2024年02月19日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包