650. 2 Keys Keyboard

public int minSteps(int n) {
        /*
        由于只能复制全部或者一个,所以:
        如果一个数不是质数,那么最快的就是由最大的公因子复制而来
        如果一个数是质数,那么所有方式都大于等于全部由1复制而来
        网上看了看这个规律都是观察得出的,所以直接背过:
        两个键的键盘问题(只能全部复制或者粘贴问题):
        非质数就考虑最大公因子,质数就直接返回n(当然考察质数也是需要循环判断没有因子)
         */
        if (n <= 1)
            return 0;
        int[] dp = new int[n+1];
        dp[0] = 0;
        dp[1] = 0;
        for (int i =2;i < n+1;i++ )
        {
            for (int j = i-1;j > 0;j--)
            {
                if (i % j == 0)
                {
                    //i/j是(i/j-1)+1,(i/j-1)代表粘贴(i/j-1),后边加的1是复制
                    dp[i] = dp[j] + (i/j);
                    break;
                }
            }
        }
        return dp[n];
    }

 

posted @ 2017-11-06 20:14  stAr_1  阅读(181)  评论(0编辑  收藏  举报