43. 字符串相乘
给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。
class Solution {
public:
string multiply(string num1, string num2) {
//参考做法,由个位开始计算相加,O(n2)
int m=num1.length(),n=num2.length();
vector
for(int i=m-1;i>=0;i--)
{
for(int j=n-1;j>=0;j--)
{
int temp=res[i+j+1]+(int)(num1[i]-'0')*(num2[j]-'0');
res[i+j+1]=temp%10;
res[i+j]+=temp/10;
}
}
string s="";
int st=0;
while(st { st++; } for(int i=st;i { s+=(res[i]+'0'); } return (s.length()==0)?"0":s; } }; 46. 全排列 给定一个 没有重复数字的序列,返回其所有可能的全排列。 class Solution { public: vector vector vector vector int num=0; dfs(nums,0,num,used_i); return res; } void dfs(vector {//s表示正在访问的节点序号,n表示已访问节点个数 if(n==nums.size()){ res.push_back(path); return; } for(int i=0;i { if(used[i])continue; used[i]=true; n++; path.push_back(nums[i]); dfs(nums,i+1,n,used); used[i]=false; n--; path.pop_back(); } } }; 53. 最大子序和 给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 class Solution { public: int maxSubArray(vector //动态规划:[i]结尾的最大连续子数组和=max(以[i-1]数字结尾的的连续子数组和+nums[i],nums[i]) int sum=0,Maxsum=nums[0],n=nums.size(); for(int i=0;i { sum=(nums[i]>=nums[i]+sum)?nums[i]:nums[i]+sum; Maxsum=(Maxsum>=sum)?Maxsum:sum; } return Maxsum; } };