首页 > 编程知识 正文

leetcode两数相加,两数之和算法

时间:2023-05-06 18:10:55 阅读:110833 作者:3172

/*给你不同面额的硬币和总额。 编写一个函数来计算构成该数所需的最小数量的硬币。 如果这笔钱不能用硬币的任何组合弥补,则返回-1. example 13360 coins=[ 1,2,5 ]。 amount=11return3(11=5)5)1) Example 2:coins=[2],amount=3return -1 .解题思路:不希望递归算法,需要大量数据的重复计算动态规划*/Go语言实现

packagemainimport ' fmt ' funccoincount (coin [ ] int,target int ) int ) DP :=make [ ] int,target 1) for I 3360=1i I { DP [ I ]=target1} DP [0]=0f ori :=1; i=target; i {for j:=0; Jlen(coin ); j { ifi=coin [ j ] { DP [ I ]=minvalue (DP [ I-coin [ j ] 1,DP [ I ] } } ifdp [ target ] target { return-1 } bint

# include iostream # include vector # includeclimits # includealgorithmusingnamespacestd; class solution { public : solution (vector int _ nums,const int _target ) :nums,target ) } for(intI=1 ) i=target; I ) (/)初始条件(/DP ) I )=int_max; for(intj=0; jnums.size (; j ) (/*满足边界(/if ) I=nums[j]DP[I-nums[j] )!=INT_MAX ) { /*转移方程*/dp[i]=min(DP[I-nums[j]1,DP[I] ); }}if(DP[target]==int_max ) return -1; return dp[target]; }private: vectorint nums; 输入目标; (; intmain(intargc,char* argv[] ) vectorint nums={ 2,5,7 }; 解决方案解决方案(nums,13 ); coutsolu.coinCount () endl; 返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。