leetcode
HJ13547816754
这个作者很懒,什么都没留下…
展开
-
leetcode 31
C++提供了next_permutation可以生成全排列,但会超时,《组合数学》提到过生产下一个排列的方法class Solution { public: void nextPermutation(vector<int>& nums) { int step; for(int i=nums.size()-2;i>=0;i--)//找...原创 2018-04-11 16:25:13 · 156 阅读 · 0 评论 -
746. Min Cost Climbing Stairs
dp[i]:到达第i层时最小花费,dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-1];class Solution { public: int minCostClimbingStairs(vector<int>& cost) { vector<int> dp; dp.push_back(...原创 2018-04-12 22:46:05 · 159 阅读 · 0 评论 -
121. Best Time to Buy and Sell Stock
dp[i]=:第i天卖出的最大利润,dp[i]=max(dp[i-1],prices[i]-prices[j])(j<i-1)。prices[j]就是产生dp[i-1]的那个买入buyin保存买入的那天class Solution { public: int maxProfit(vector<int>& prices) { vector<in...原创 2018-04-12 23:28:58 · 118 阅读 · 0 评论 -
70. Climbing Stairs
dp[i]:到达第i层需要的步数,dp[i]=dp[i-1]+dp[i-2].我犯得两个错误,1.dp[i]=dp[i-1]+1+dp[i-2]+1 2.只求到dp[0],dp[1]就开始循环class Solution { public: int climbStairs(int n) { vector<int> dp; dp.push_bac...原创 2018-04-12 23:47:56 · 119 阅读 · 0 评论 -
198. House Robber
dp[i]:到第i间房时偷盗的最大值(可以不偷第i间房)dp[i]=max(dp[i-1],dp[i-2]+nums[i],dp[i-3]+nums[i]2,1,1,2 注意必须考虑dp[i-3]class Solution { public: int rob(vector<int>& nums) { if(nums.size()==0) ...原创 2018-04-13 10:18:26 · 144 阅读 · 0 评论 -
338. Counting Bits
4:100 ----1000 8 dp[i-flag/2](flag为2^n) .此时flag为85:101 ----1001 96:110 ----1010 107:111 ----1011 11 1100 12 dp[i-flag/2*3]+1 1101 13 ...原创 2018-04-13 11:39:12 · 124 阅读 · 0 评论 -
647. Palindromic Substrings
这道题直接用dp[i][j]保存i到j的Palindromic Substrings不好求递归式。通过分析可以知道最多n+(n-1)+(n-2)+....+1,以nums[i]开头的最多n个,所以可以设dp[i][j]为i---j是不是Palindromic Substrings,并记忆化搜索。class Solution { public: int countSubstrings(str...原创 2018-04-13 12:57:12 · 134 阅读 · 0 评论