Leetcode 第237,258,263,290,292,349,350,374,383,387题(Java解法)

本文详细介绍了LeetCode中10道经典的算法题目,包括删除链表节点、各位相加、丑数、单词规律、Nim游戏、两数组交集等,提供了Java解法。每道题都解析了解题思路并给出具体代码,涉及链表操作、数学逻辑、哈希表应用等多种编程技巧。
摘要由CSDN通过智能技术生成

第237题 删除链表中的节点

请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。

示例 1:

输入 输出
head = [4,5,1,9], node = 5 [4,1,9]

解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.

示例 2:

输入 输出
head = [4,5,1,9], node = 1 [4,5,9]

解释:给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.

解题思路

直接在删除节点处修改值和指针,令它的值为下一节点的值,令它的下一节点为下下个节点。

代码

// 删除链表中的节点:链表
class Solution {
   
    public void deleteNode(ListNode node) {
   
    node.val = node.next.val;
    node.next = node.next.next;
    }
}

时间复杂度为O(1)
空间复杂度为O(1)

第258题 各位相加/font>

给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。

示例 1:

输入 输出
38 2

解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。

解题思路

因为小于9的数,可以直接返回当前数,而大于9的数,只需对9取余,就能得到各位相加的值。

代码

// 各位相加:数学
class Solution {
   
    public int addDigits(int num) {
   
        return (num - 1) % 9 + 1;
    }
}

时间复杂度为O(1)
空间复杂度为O(1)

第263题 丑数

给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。
丑数 就是只包含质因数 2、3 和/或 5 的正整数。

示例 1:

输入 输出
n = 6 true

解释:6 = 2 × 3

示例 2:

输入 输出
n = 8 true

解释:8 = 2 × 2 × 2

示例 3:

输入 输出
n = 14 false

解释:14 不是丑数,因为它包含了另外一个质因数 7 。

示例 4:

输入 输出
n = 1 true

解释:1 通常被视为丑数。

解题思路

让给定数字对2,3,5之中一个数取余,如果余数为0,则用给定数字除以这个数,再次对这三个数字取余,直到最后除完剩余1,否则就不是丑数。

代码

// 丑数:数学
class Solution {
   
    public boolean isUgly(int n) {
   
        if (n <= 0) {
   
            return false;
        }//给定数字为0或负数时,不是丑数
        int[] factors = {
   2, 3, 5};//定义2,3,5为一个数组
        for (int factor : factors) {
   
            while (n % factor == 0) {
   //如果n对这三个数字能整数,则除以该数字,再次循环判断,直到n除完剩下1
                n /= factor;
            }
        }
        return n == 1;//如果n对2,3,5这三个数字不难做除法最终不等于1,则代表需要这三个数字以外的数字才能除尽,说明不是丑数
    }
}

时间复杂度为O(log n),n为除的次数
空间复杂度为O(1)

第290题 单词规律

给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。

示例 1:

输入 输出
pattern = “abba”, str = “dog cat cat dog” true

示例 2:

输入 输出
pattern = “abba”, str = “dog cat cat fish” false

示例 3:

输入 输出
pattern = “aaaa”, str = “dog cat cat dog” false

示例 4:

输入 输出
pattern = “abba”, str = “dog dog dog dog” false

解题思路

用哈希表存储两个字符串的映射关系,如果后续遍历到同样字符串,要是第二个字符串没有对应映射关系,则返回false,如果遍历结束,则返回true。

代码

// 单词规律:哈希表
class Solution {
   
    public boolean wordPattern(String pattern, String str) {
   
        Map<String, Character> str2ch = new HashMap<String, Character>();
        Map<Character, String> ch2str = new HashMap<Chara
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值