三个数组成的三位数包括0-9,他们之间可重复,和值包括0-27,假如他们的和值为5,他们的和值有多少种排列组合

326 阅读1分钟

`

		/**
                     * @author 夜将尽
		 * @param rawArray 原始数组
		 * @param sumValue 目标和值
		 * @param firstNum 第一次随机的数字
		 * @param secondNum 第二次随机的数字
		 * @param thirdlyNum 第三次随机的数字
		 * @param tenDigitArray 通过第一次随机的数字过滤掉大于等于firstNum的数组内的项组成一个新的数组,(第二个数字的可选项)
		 * @param singleDigitArray 个位数可选数组
		 * @param allPermutations 和值的所有排列组合
		 * */
		sumValueCombination(){
			let rawArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
			let sumValue = 5;
			let firstNum;
			let secondNum;
			let thirdlyNum;
			let tenDigitArray;
			let singleDigitArray;
			let allPermutations=[];
			//第一遍循环所有数组数据都符合条件
			rawArray.map((rawAitem,rawAindex)=>{
				firstNum = rawAitem;
                                    //过滤掉和值减去第一遍循环数字得到的结果,使其小于等于得到的这个结果
				tenDigitArray = rawArray.filter((rawAFitem,rawAFindex)=>{
					return sumValue-firstNum>=rawAFitem
				})
                                    //经过第一位数字筛选后的数组
				tenDigitArray.map((tenDitem,tenDindex)=>{
					secondNum = tenDitem;
                                            //过滤掉和值减去第一遍和第二遍循环数字得到的结果,使其等于得到的这个结果,只有这样才能凑齐和值答案,前两位确定之后,最后一位实际上相当于已经定死了
					singleDigitArray = tenDigitArray.filter((tenDFitem,tenDFindex)=>{
						return sumValue-firstNum-secondNum==tenDFitem
					})
					singleDigitArray.map((singleDitem,singleDindex)=>{
						thirdlyNum = singleDitem;
						//在这里拼接三位数字最后push进数组,数组的长度就是和值的所有排列组合
                                                    allPermutations.push(""+firstNum+secondNum+thirdlyNum);
					})
				})
			})
			console.log(allPermutations,"allPermutations")
			
		}

`