LeetCode77:组合
题目描述: 方法1:回溯,startIndex来记录下一层递归,搜索的起始位置 class Solution { public: void backtrack(int n,int k,int StartIndex,vector<vector<int>>&result,vector<int>d
题目描述: 方法1:回溯,startIndex来记录下一层递归,搜索的起始位置 class Solution { public: void backtrack(int n,int k,int StartIndex,vector<vector<int>>&result,vector<int>d
题目描述: 方法1:回溯算法 方法2:动态规划 sum是固定的,target也是固定的,有式子left + right = sum,left - right = target,设left为背包容量,装满left背包的策略总数即为题解,left = (target + sum) / 2 初始dp[i]
题目描述: 方法1:转化为背包问题,把石头尽可能分成两堆,求两堆石头重量差最小值,进一步转化为,将石头放进容量为sum/2的背包中,最大价值为MaxValue,最后(sum - MaxValue) - MaxValue即为题解 class Solution { public: int las
题目描述: 方法1:把题目修改为0-1背包问题,nums[i] 为物品i的重量与价值,背包容量为nums元素之和的一半,如果装的最大价值为背包容量,则返回true class Solution { public: bool canPartition(vector<int>& nums) {
题目描述:左根右的遍历方式 方法1:递归 class Solution { public: void inorder(TreeNode* root,vector<int>value){ if(!root) return; inorder(root->left,
链接:https://kamacoder.com/problempage.php?pid=1046 题目描述: 方法1:二维dp解决背包问题 #include<iostream> #include<vector> #include<cmath> using namespace std; int s
题目描述:有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 例子:背包重量为4 方法1:二维dp 1:确定dp数组,dp[i][j] 表示从下标为[0-i]的物品里任意取,放
题目描述:给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化,返回 你可以获得的最大乘积 。 方法1:动态规划,dp[i]表示第i个数可获得的最大乘积 class Solution { public: int integerBreak(int
题目描述: 方法1:动态规划,dp[i][j]表示到第 i-1 行第 j-1 列不同路径,dp[i][j] = dp[i-1][j] + dp[i][j-1];其中第一列和第一行固定只有一种路径,从第二行第二列开始遍历,保证可以填满dp数组 class Solution { public:
题目描述:根左右的遍历方式 方法1:递归 class Solution { public: vector<int> vals; void pre_order(TreeNode* root){ if(!root) return; vals.push_ba