LeetCode 650. 2 Keys Keyboard

Initially on a notepad only one character 'A' is present. You can perform two operations on this notepad for each step:

Copy All: You can copy all the characters present on the notepad (partial copy is not allowed).

Paste: You can paste the characters which are copied last time.

Given a number n. You have to get exactly n 'A' on the notepad by performing the minimum number of steps permitted. Output the minimum number of steps to get n 'A'.

Example 1:

Input: 3
Output: 3
Explanation:
Intitally, we have one character 'A'.
In step 1, we use Copy All operation.
In step 2, we use Paste operation to get 'AA'.
In step 3, we use Paste operation to get 'AAA'.

Note:

The n will be in the range [1, 1000].

分析

如果n是质数的话,就要一个一个粘贴上去,次数就是n.
如果不是质数的话,由先由一个A获得n的最大公因子m为模版,在copy all,在paste n/m-1 次。

class Solution {
public:
    int isprime(int n){
        int i;
        if(n==1) return 1;
        for(i=2;i<=sqrt(n);i++)
            if(n%i==0) return i;
        return -1;
    }
    int minSteps(int n) {
        int dp[11001]={0};
        if(isprime(n)==-1)
           return n;
        for(int i=2;i<=n;i++)
            if(isprime(i)==-1)
               dp[i]=i;
            else
               dp[i]=dp[i/isprime(i)]+isprime(i);
        return dp[n];
    }
};

一种更棒的写法

class Solution {
public:
    int minSteps(int n) {
        if (n == 1) return 0;
        for (int i = 2; i < n; i++)
            if (n % i == 0) return i + minSteps(n / i);
        return n;
    }
};
posted @   A-Little-Nut  阅读(85)  评论(0编辑  收藏  举报
编辑推荐:
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
· 为什么 .NET8线程池 容易引发线程饥饿
阅读排行:
· 终于决定:把自己家的能源管理系统开源了!
· [.NET] 使用客户端缓存提高API性能
· 外部H5唤起常用小程序链接规则整理
· C#实现 Winform 程序在系统托盘显示图标 & 开机自启动
· WPF 怎么利用behavior优雅的给一个Datagrid添加一个全选的功能
点击右上角即可分享
微信分享提示