class Solution {
public:intfirstMissingPositive(vector<int>& nums){int len = nums.size();for(int i =0; i < len;++ i){while(nums[i]>0&& nums[i]<= len && nums[nums[i]-1]!= nums[i])swap(nums[i], nums[nums[i]-1]);}for(int i =0; i < len;++ i)if(nums[i]!= i +1)return i +1;return len +1;}};
42. 接雨水
class Solution {
public:inttrap(vector<int>& height){
stack<int> st;int ans =0;for(int i =0; i < height.size();++ i){while(st.size()&& height[st.top()]< height[i]){int x = st.top();st.pop();if(!st.size())break;int l = st.top();int h =min(height[i], height[l])- height[x];int w = i - l -1;
ans += h * w;}
st.push(i);}return ans;}};
43. 字符串相乘
class Solution {
public:
string multiply(string num1, string num2){if(num1 =="0"|| num2 =="0")return"0";
vector<int>ve(num1.size()+ num2.size());for(int i = num1.size()-1; i >=0;-- i)for(int j = num2.size()-1; j >=0;-- j){int val = ve[i + j +1]+(num1[i]-'0')*(num2[j]-'0');
ve[i + j]+= val /10;
ve[i + j +1]= val %10;}
string ans;for(int i =0; i < ve.size();++ i){if(!i &&!ve[i])continue;
ans.push_back(ve[i]+'0');}return ans;}};
44. 通配符匹配
class Solution {
public:
bool isMatch(string s, string p){int n = s.size(), m = p.size();
vector<vector<int>>f(n +1, vector<int>(m +1));
f[0][0]=1;for(int i =1; i <= m;++ i)if(p[i -1]=='*') f[0][i]=1;elsebreak;for(int i =1; i <= n;++ i)for(int j =1; j <= m;++ j){switch(p[j -1]){case'?': f[i][j]= f[i -1][j -1];break;case'*': f[i][j]= f[i -1][j]|| f[i][j -1]|| f[i -1][j -1];break;default: f[i][j]=(s[i -1]== p[j -1])&& f[i -1][j -1];}}return f[n][m];}};
45. 跳跃游戏 II
class Solution {
public:intjump(vector<int>& nums){int n = nums.size()-1;
vector<int>f(n +1,0x3f3f3f3f);
f[0]=0;for(int i =0; i <= n;++ i){for(int j =1; j <= nums[i]&& i + j <= n;++ j)
f[i + j]=min(f[i + j], f[i]+1);}return f[n];}};
class Solution {
public:doublemyPow(double x,int n){long f = n <0?-1:1, y =abs(n);double ans =1, t = x;if(f ==-1) t =1/ t;while(y){if(y &1) ans *= t;
t *= t;
y >>=1;}return ans;}};