前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode | 数据结构与算法 | 2月 合集

LeetCode | 数据结构与算法 | 2月 合集

作者头像
yiyun
发布2023-05-18 14:29:04
1860
发布2023-05-18 14:29:04
举报
文章被收录于专栏:yiyun 的专栏yiyun 的专栏

1. 删除链表的倒数第 N 个结点

题目 19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode) 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1:

代码语言:javascript
复制
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例 2:

代码语言:javascript
复制
输入:head = [1], n = 1
输出:[]

示例 3:

代码语言:javascript
复制
输入:head = [1,2], n = 1
输出:[1]

提示:

  • 链表中结点的数目为 sz
  • 1 <= sz <= 30
  • 0 <= Node.val <= 100
  • 1 <= n <= sz

进阶:你能尝试使用一趟扫描实现吗?

题解

python3

代码语言:javascript
复制
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:

    # 方法1: 追随指针
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
        # 在最前添加一个节点,用于接 head
        dummy = ListNode(0, head)
        # 快指针: right, 慢指针: left
        left, right = dummy, head
        # 1. 先让 right 快指针 走 n 步
        for i in range(n):
            right = right.next
        # 2. 再 慢指针,快指针 一起走
        # 直到 快指针走到终点(注意,走到末节点就可以了)
        while right != None:
            right = right.next
            left = left.next

        # 跳过中间的节点(即删除倒数第n个节点)
        left.next = left.next.next

        # 注意:返回的是 dummy.next
        return dummy.next

2. 有效的括号

题目 20. 有效的括号 - 力扣(LeetCode)

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

代码语言:javascript
复制
输入:s = "()"
输出:true

示例 2:

代码语言:javascript
复制
输入:s = "()[]{}"
输出:true

示例 3:

代码语言:javascript
复制
输入:s = "(]"
输出:false

提示:

  • 1 <= s.length <= 10^4
  • s 仅由括号 '()[]{}' 组成

题解 C#

代码语言:javascript
复制
public class Solution {
    public bool IsValid(string s) {
        // key: 右括号 value: 左括号
        Dictionary<char, char> dic = new Dictionary<char, char>()
        {
            { ')', '(' },
            { '}', '{' },
            { ']', '[' }
        };
        Stack<char> stack = new Stack<char>();
        //Queue<char> stack = new Queue<char>();
        foreach (char ch in s)
        {
            if (dic.ContainsKey(ch))
            {
                // 是 右括号
                if (stack.Count == 0 || stack.Peek() != dic[ch])
                {
                    // 栈为空 或 栈顶字符 不匹配此右括号
                    return false;
                }

                // 弹出栈中匹配的左括号
                stack.Pop();
            }
            else
            {
                // 压入 左括号
                stack.Push(ch);
            }
        }

        // 最后为空则说明括号完全匹配,有效括号
        return stack.Count == 0;
    }
}

3. 整数反转

题目

  • 7. 整数反转 - 力扣(LeetCode)
  • 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
  • 如果反转后整数超过 32 位的有符号整数的范围 

,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

代码语言:javascript
复制
输入:x = 123
输出:321

示例 2:

代码语言:javascript
复制
输入:x = -123
输出:-321

示例 3:

代码语言:javascript
复制
输入:x = 120
输出:21

示例 4:

代码语言:javascript
复制
输入:x = 0
输出:0

提示:

  • -2^31 <= x <= 2^31 - 1

题解 C#

代码语言:javascript
复制
public class Solution {
    public int Reverse(int num) {
        int rev = 0;
        while (num != 0)
        {
            // 取个位弹出
            int pop = num % 10;
            // 降位: 百位变十位
            num = num / 10;
            // 防止溢出
            if (rev > int.MaxValue / 10 || (rev == int.MaxValue / 10 && pop > 7)) return 0;
            if (rev < int.MinValue / 10 || (rev == int.MinValue / 10 && pop < -8)) return 0;

            rev = rev * 10 + pop;
        }

        return rev;
    }
}

Q&A 补充 参考 感谢帮助!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-02-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 删除链表的倒数第 N 个结点
    • 题目 19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode) 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1:
      • 题解
        • 题目 20. 有效的括号 - 力扣(LeetCode)
          • 题解 C#
            • 题目
              • 题解 C#
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档