leecode40.组合总和||

 这题个人感觉很难,一开始按照正常的组合写法没有考虑到去重问题,根据以往写三四数之和的经验,对数组进行了排序,再进行去重逻辑的编写才得以通关,详细去重可以去看看代码随想录,甚至有使用到used数组讲解树枝和数层的去重

class Solution {
private:
    vector<vector<int>> result;
    vector<int> combination;

    void combinationSum2(vector<int>& candidates,int target,int count,int startIndex){
        if(count==target)
            result.push_back(combination);
        else{
            for(int i=startIndex;i<candidates.size()&&count<target;i++){
                //去重
                if(i>startIndex&&candidates[i]==candidates[i-1])
                    continue;

                combination.push_back(candidates[i]);
                combinationSum2(candidates,target,count+candidates[i],i+1);
                combination.pop_back();
            }
        }
    }
public:
    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
        sort(candidates.begin(),candidates.end());
        combinationSum2(candidates,target,0,0);
        return result;
    }
};

向量点积是一种重要的数学运算,广泛应用于物理学、工程学以及计算机科学等领域。对于两个非零向量$\vec{A}$和$\vec{B}$之间的点积可以表示为: $$\vec{A} \cdot \vec{B} = |\vec{A}| |\vec{B}| \cos{\theta}$$ 这里$|\vec{A}|$代表向量$\vec{A}$的长度(模),$|\vec{B}|$代表向量$\vec{B}$的长度,而$\theta$则是这两个向量之间形成的夹角。 这个公式可以从几何角度理解:一个向量在另一个向量上的投影乘以被投影向量的长度即得到两者的点积。当两个向量方向相同的时候,它们的点积最大;当两者垂直时,由于$\cos{90^\circ}=0$,所以其点积等于零;若两向量相反,则点积取负值。 从代数的角度来看,假设我们有两个三维空间中的向量$\vec{A}=(A_x,A_y,A_z)$和$\vec{B}=(B_x,B_y,B_z)$,那么它们的点积也可以写作各个坐标分量对应相乘后的总和: $$\vec{A} \cdot \vec{B} = A_x B_x + A_y B_y + A_z B_z$$ 这种形式更容易计算,并且适用于任何维度的空间中定义的向量。 关于公式的推导,可以通过两种方式来完成: - **由几何定义出发**:利用三角形法则或者平行四边形法则结合余弦定律得出; - **由代数定义出发**:直接应用坐标的线性组合性质证明两点间的距离平方等价转换成向量自身的内积减去其他项的形式。 这两种方法最终都会导向同一个结论——上述提到的标准点积公式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值