题目描述
编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
示例:
1 | 输入: 19 |
解释:
12+92=82
82+22=68
62+82=100
12+02+02=1
题目分析
就求呗…
把每次的结果存在哈希堆里来查重
源码
1 | int toNextInt(int x) { |
编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
示例:
1 | 输入: 19 |
解释:
12+92=82
82+22=68
62+82=100
12+02+02=1
就求呗…
把每次的结果存在哈希堆里来查重
1 | int toNextInt(int x) { |
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
1 | 给定 1->2->3->4, 你应该返回 2->1->4->3. |
1 | /* Defination of ListNode |
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
1 | 示例: |
当删除了倒数第二个节点后,链表变为 1->2->3->5.
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
既然没有给链表的长度, 一个指针是没法用一边扫描实现的. 所以用两个指针, 一开始两个指针slow和fast都指向头结点, 让fast指针先走n步, 之后两个指针一起走, 在fast到NULL时候,
1 | #include<bits/stdc++.h> |
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
1 | 输入: [1,2,3] |
示例 2:
1 | 输入: [4,3,2,1] |
从后向前遍历数组, 如果某一位是9则设为0, 如果非9则加一, 并返回.
如果全部为9则将全部位设为0并在数组开头插入1.
1 | class Solution { |
实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。
如果不存在,则返回 -1。
示例 1:
1 | 输入: haystack = "hello", needle = "ll" |
示例 2:
1 | 输入: haystack = "aaaaa", needle = "bba" |
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。
在haystack字符串中寻找needle的首字符, 取needle长度的子串并和needle对比, 如果相同返回位置, 否则将haystack字符串的那一位改为0.
1 | class Solution { |
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例 1:
1 | 给定数组 nums = [1,1,2], |
示例 2:
1 | 给定 nums = [0,0,1,1,1,2,2,3,3,4], |
说明:
为什么返回数值是整数,但输出的答案是数组呢?
请注意,输入数组是以引用方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
你可以想象内部操作如下:
1 | // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝 |
迭代整个数组, 如果某一个元素和其上一个元素相等则删除此元素.
1 | class Solution { |
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
1 | 输入: |
同 Leetcode 21.合并两个有序链表, 将所有节点放入优先队列后建新表.
1 | struct comp{ // 自定义排序函数 |
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
1 | 输入:1->2->4, 1->3->4 |
通过自定义排序函数来使用优先队列来push所有节点后重新建立新链表返回, 这个方法可以用在多链表的题型中: Leetcode 23.合并K个排序链表.
一定要将最后的节点的next设为NULL!!!
1 | struct comp{ // 自定义比较函数 |
给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。
示例:
输入:[5,3,6,2,4,null,8,1,null,null,null,7,9]
5
/ \
3 6
/ \ \
2 4 8
/ / \
1 7 9
输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]
1
\
2
\
3
\
4
\
5
\
6
\
7
\
8
\
9
使用递归中序储存节点至vector中, 后重新构建树.
1 | class Solution { |
如果数组是单调递增或单调递减的,那么它是单调的。
如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= j,A[i]> = A[j],那么数组 A 是单调递减的。
当给定的数组 A 是单调数组时返回 true,否则返回 false。
将A的升序排序和降序排序后的数组与A相比较, 如果有一个和A相同则A是单调的.
1 | class Solution { |