# [LeetCode]Add Binary&Climbing Stairs&Remove Duplicates from Sorted List

Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"
Return "100".

• 题意：二进制加法.
• 解法：把两个串都倒过来(低位先加).然后模拟一下就好了.注意最后也要进位就好.
class Solution {
static int getIntByIndxInString(const std::string& rkStr, int iIndx) {
return iIndx < (int)rkStr.size() ? rkStr[iIndx] - '0' : 0;
}
public:
string addBinary(string a, string b) {
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
string kResult;
for (int i = 0; i < (int)a.size() || i < (int)b.size(); ++i) {
int iAddSum = getIntByIndxInString(a, i) + getIntByIndxInString(b, i) + iAddValue;//这里是整数相加结果只有0 1 2
}
kResult.push_back('1');
reverse(kResult.begin(), kResult.end());
return kResult;
}
};

## Climbing Stairs

You are climbing a stair case. It takes n steps to reach to the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

• 题意：走梯子，一个普通的递推.
• 对于第i个梯子有前一步和前两步都能到达它，所以方案为前两个的和，方程式为dp[i]=dp[i-1]+dp[i-2](i>1).
//用a,b表示c的前两步
class Solution {
public:
int climbStairs(int n) {
int a = 0, b = 1, c = 1;
for (; n--;) {
c = a + b;
a = b;
b = c;
}
return c;
}
};

## Remove Duplicates from Sorted List

Given a sorted linked list, delete all duplicates such that each element appear only once.

For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.

• 题意：有序链表的去重
• 解法：跟这里差不多，不过本题不能直接访问上一个节点，所以得把上一个节点也存下来在循环的时候.
/**
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* pkMove = pkResult;
pkMove = pkMove->next;
}
}
pkMove->next = nullptr;
return pkResult;
}
};

• 本文已收录于以下专栏：

举报原因： 您举报文章：[LeetCode]Add Binary&Climbing Stairs&Remove Duplicates from Sorted List 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)