Java使用递归将一个整数按照一定数量分组生成一个数组,实现尽可能的均分
1.核心思想:
①如果这个整数可以整除目标数,则可以直接实现均分。
②如果这个整数无法整除目标数,则需要使用递归思想将两数差值平均分到数组的每个元素上,这样数组之间每个元素的最大差值只能为1,通过此方法保证数组元素尽量均分。
2.代码实现
/** * @description //使用递归分组算法为表头指定跨列随机分布 * @author flw * @createTime 2022/7/6 9:31 * @param array --埋点,存在直接操作数组的情况 * @param maxSize --需要做随机均分的数 * @param size --需要随机分布的数组长度 * @return int[] */ protected static int[] getRandomNum(int[] array, int maxSize, int size){ //定义一个初始长度为size的数组,且元素值为1的数组 int[] res = new int[size]; for(int i=0; i<=size -1 ;i++){ res[i] = 1; } if(array != null){ res = array; } //计算最大数值和当前数值的差值 int difference = maxSize - size; //可以整除操作 if(difference > 0){ if(difference > size){ for(int i=0; i<=size -1 ;i++){ res[i] = res[i]+1; } //递归操作 getRandomNum(res,difference,size); }else{ for(int i=0; i<=difference -1 ;i++){ res[i] = res[i]+1; } } } return res; }
3.结果验证
public static void main(String[] args) { /*将整数7,按照长度为3的数组做随机分布,保证元素差值最小,期望结果【3,2,2】*/ System.out.println(JSON.toJSONString(getRandomNum(null,7,3))); }
4.总结
开发不易,开心自闭,愿每个技术人温暖一生~