o(* ̄︶ ̄*)o

  博客园  :: 首页  ::  :: 联系 :: 订阅 订阅  :: 管理
/**
 * 题目:当前有一堆1块,2快,5快零钱,将10块钱换成零钱,有多少种换法?
 */

var aryParams = [1,2,5];
var nTotalNum = 10;
var arySum = [];

//相同数组
var isEqualArray = function(pAry){
	var strAry = pAry.sort().toString();
	for(var key in arySum){
		var pAryTmp = arySum[key];
		if(pAryTmp.sort().toString() == strAry){
			return false;
		}
	}

	return true;
};

//深拷贝数组
var getCopyArray = function(pAryOld){
	var pAryNew = [];
	for(var key in pAryOld){
		pAryNew.push(pAryOld[key]);
	}

	return pAryNew;
};

//获取分解状态
var getLastState = function(aryNum, nSubValue){
	var nIdx = aryNum.length - 1;
	var nValue = aryNum[nIdx];

	if(nValue < nSubValue ){
		//放弃存储
		return -1;
	}

	if(nValue == nSubValue){
		//进行存储
		return 0;
	}

	//继续递归
	return 1;
};

//递归函数
var callbackAry = function(aryNum){
	for(var key in aryParams){
		var nEnum = getLastState(aryNum, aryParams[key]);
		if(nEnum == 0 && isEqualArray(aryNum)){
			arySum.push(aryNum);
		}else if(nEnum > 0){
			var nSubValue = aryParams[key];
			var pCpy = getCopyArray(aryNum);
			var nIdx = pCpy.length - 1;
			var nValue = pCpy[nIdx];

			pCpy[nIdx] = nSubValue;
			pCpy.push(nValue - nSubValue);

			callbackAry(pCpy);
		}
		
	}
};



var pTable = [];
pTable.push(nTotalNum);
callbackAry(pTable);

console.log("可以换成",arySum.length, "种");

console.log("序列如下:")
for(var key in arySum){
	console.log(arySum[key]);
}

  

posted on 2018-11-19 21:51  熊本熊の熊  阅读(384)  评论(0)    收藏  举报