43. 字符串相乘
class Solution {
public:
string multiply(string num1, string num2) {
if (num1 == "0" || num2 == "0") {
return "0";
}
string ans = "0";
int m = num1.size(), n = num2.size();
for (int i = n - 1; i >= 0; i--) {
string curr;
int add = 0;
for (int j = n - 1; j > i; j--) {
curr.push_back(0);
}
int y = num2.at(i) - '0';
for (int j = m - 1; j >= 0; j--) {
int x = num1.at(j) - '0';
int product = x * y + add;
curr.push_back(product % 10);
add = product / 10;
}
while (add != 0) {
curr.push_back(add % 10);
add /= 10;
}
reverse(curr.begin(), curr.end());
for (auto &c : curr) {
c += '0';
}
ans = addStrings(ans, curr);
}
return ans;
}
string addStrings(string &num1, string &num2) {
int i = num1.size() - 1, j = num2.size() - 1, add = 0;
string ans;
while (i >= 0 || j >= 0 || add != 0) {
int x = i >= 0 ? num1.at(i) - '0' : 0;
int y = j >= 0 ? num2.at(j) - '0' : 0;
int result = x + y + add;
ans.push_back(result % 10);
add = result / 10;
i--;
j--;
}
reverse(ans.begin(), ans.end());
for (auto &c: ans) {
c += '0';
}
return ans;
}
};
46. 全排列
class Solution {
vector<vector<int>> ans;
vector<int> se;
vector<bool> check;
int count = 0;
int n;
public:
void dfs(vector<int>& nums, int i)
{
count++;
se.push_back(nums[i]);
check[i] = true;
if (count == n)
{
ans.push_back(se);
}
else
{
for (int j = 0; j < n; ++j)
{
if (!check[j])
{
dfs(nums, j);
}
}
}
se.pop_back();
check[i] = false;
count--;
return;
}
vector<vector<int>> permute(vector<int>& nums) {
n = nums.size();
check = vector<bool>(n, false);
for (int i = 0; i < n; ++i)
{
dfs(nums, i);
}
return ans;
}
};
53. 最大子序和
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int len = nums.size();
int ans = nums[0];
vector<int> dp(len);
dp[0] = nums[0];
for(int i = 1; i < len; i++) {
if(dp[i - 1] > 0){
dp[i] = dp[i - 1] + nums[i];
}
else {
dp[i] = nums[i];
}
if(ans < dp[i]) ans = dp[i];
}
return ans;
}
};