0
点赞
收藏
分享

微信扫一扫

货物摆放(因子,ArrayList数组)

刘员外__ 2022-03-30 阅读 32

解题思路:按照常规思路三层for循环,肯定是要超时的,必须得做相应优化。我们知道,三个数相乘得到的数,肯定是这三个数的倍数,也就是说,这三个数都是它的因子。我们试图先找到num的所有因子,然后再在所有因子中找所有满足相乘为num的组合,这样就能大大降低复杂度。

代码如下:

public class Main {
    public static void main(String[] args) {
        //先找出num的所有因子,放入ArrayList数组
        ArrayList<Long> arr = new ArrayList<>();
        long num = 2021041820210418l;
        for ( long i = 1 ; i <= Math.sqrt(num) ; i++ ){//遍历到num平方根即可
            if ( num % i == 0 ){//如果i是其中一个因子
                arr.add(i);
                long n = num / i;//找出另一个和i相乘为num的因子
                if ( n != i ){//避免两个因子重复
                    arr.add(n);
                }
            }
        }

        int size = arr.size();
        int count = 0;
        for (long i : arr){//三层循环
            for (long j : arr){
                for (long k : arr){
                    if (i*j*k == num) count++;
                }
            }
        }
        System.out.println(count);
    }
}

举报

相关推荐

0 条评论