Java解leetcode,助力面试之简单10道题(十二)
第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