码迷,mamicode.com
首页 > 其他好文 > 详细

2 Keys Keyboard

时间:2017-10-05 18:26:26      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:range   代码   状态   复杂度   转换   bre   boa   obj   keyboard   

    这道题为中等题

  题目:

    技术分享

 

  思路:

    我的:DP,状态转换方程为 dp[i] = dp[p] + i / p,其中i为当前索引,p为i的因数,这个还是很容易想到的,比如i=8,p为4时,dp[8]就等于dp[4]+8/4,其中8/4可以理解为把i=4是的情况进行复制再粘贴的数量。但是这样的话复杂度比较高,下面一种方法是我在讨论区看见的

    另一种:列表从2到n-1循环,如果n % d == 0,那么s+=d,n变为n/d

  代码:

    我的:

 1 class Solution(object):
 2     def minSteps(self, n):
 3         """
 4         :type n: int
 5         :rtype: int
 6         """
 7         dp = [0 for i in xrange(n+1)]
 8         for i in xrange(2, n+1):
 9             j = i - 1
10             dp[i] = i
11             for p in xrange(j, 1, -1):
12                 if i % p == 0: 
13                     dp[i] = dp[p] + i / p
14                     break
15         return dp[n]

 

    另一种方案(JAVA):

 1 public int minSteps(int n) {
 2         int s = 0;
 3         for (int d = 2; d <= n; d++) {
 4             while (n % d == 0) {
 5                 s += d;
 6                 n /= d;
 7             }
 8         }
 9         return s;
10     }

 

2 Keys Keyboard

标签:range   代码   状态   复杂度   转换   bre   boa   obj   keyboard   

原文地址:http://www.cnblogs.com/liuxinzhi/p/7629473.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!