1、爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例 1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
示例 2:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶
解题思路:斐波那契函数 f(i)=f(i+1)+f(i+2)
int climbStairs(int n) {
if(n<=2) return n;
int i1=1,i2=2;
for(int i=3;i<=n;i++){
int temp=i1+i2;
i1=i2;
i2=temp;
}
return i2;
}
2、删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
ListNode* deleteDuplicates(ListNode* head) {
if(head==NULL||head->next==NULL){
return head;
}
ListNode* p=head;
while(p!=NULL){
if(p->next==NULL||p==NULL){
break;
}
if(p->next->val==p->val){
p->next=p->next->next;
}else{
p=p->next;
}
}
return head;
}
3、合并有序数组
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
说明:
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
示例:
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出: [1,2,2,3,5,6]
public void merge(int[] nums1, int m, int[] nums2, int n) {
int p = m-- + n-- - 1;
while (m >= 0 && n >= 0) {
nums1[p--] = nums1[m] > nums2[n] ? nums1[m--] : nums2[n--];
}
while (n >= 0) {
nums1[p--] = nums2[n--];
}
}
4、相同的树
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1:
输入: 1 1
/ \ / \
2 3 2 3
[1,2,3], [1,2,3]
输出: true
示例 2:
输入: 1 1
/ \
2 2
[1,2], [1,null,2]
输出: false
解题思路:关于树的算法一般都是用递归
bool isSameTree(TreeNode* p, TreeNode* q) {
if(p==NULL&&q==NULL)return true;
if(p==NULL||q==NULL)return false;
if(p->val!=q->val)return false;
return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}
5、对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
bool isSymmetric(TreeNode* root) {
if(!root)
{
return true;
}
return isEqueterr(root->left, root->right);
}
bool isEqueterr(TreeNode* p, TreeNode* q)
{
if (p==NULL && q==NULL)
{
return true;
}
if ((p!=NULL && q == NULL) || (q != NULL && p==NULL))
{
return false;
}
if (p->val == q->val)
{
return isEqueterr(p->left, q->right)&&isEqueterr(p->right,q->left);
}
return false;
}