zoukankan      html  css  js  c++  java
  • leet code 面试题14- I. 剪绳子

    这个题目是在剑指offer上看到的,当时以为自己看明白了,自己写的时候发现还是思考的不够细致,主要有一下几点:

    1,当n = 1、2、3时应该直接返回固定的值,这一点应该大家应该都能想到,我在写的时候漏掉了3.。。。

    2,在实际分割的时候定义了rope_maxlen数组来存储每个长度对应的最大分割乘积值,但是0-3的定义如下:

       rope_maxlen[1] = 1;
            rope_maxlen[2] = 2;
            rope_maxlen[3] = 3;
    为什么会这样呢???
    因为在实际分割是如果分割结果中有一段是以上三个值中的任意一个,那它对应的最长分割乘积就是它自己的长度,因为此时已经割了一刀了,在以上三个值长度绳子上再割一刀不是必须的了,那么它对应的最大乘积值就是它自身,即不再分割
    3,在定义数组时,数组长度应该比n大1,原因大家应该已经想到了;
    最后奉上我的代码,感觉比书上写的要稍微简洁一点:
    class Solution {
    public:
        int cuttingRope(int n) {
            if (n < 2) {
                return 0;
            }
            if (n == 2) {
                return 1;
            }
            if (n == 3) {
                return 2;
            }
            vector<int> rope_maxlen(n+1);
            for (int k=0; k<=n; k++) {
                rope_maxlen[k] = 0;
            }
    
            rope_maxlen[1] = 1;
            rope_maxlen[2] = 2;
            rope_maxlen[3] = 3;
            
            if (n<4) {
                return rope_maxlen[n];
            }
    
            for (int i=4; i<=n; i++) {
                for (int j=1; j<=i/2; j++) {
                    rope_maxlen[i] = std::max(rope_maxlen[i], rope_maxlen[j]*rope_maxlen[i-j]);
                }
            }
    
            return rope_maxlen[n];
        }
    };
  • 相关阅读:
    SharePoint 2013 开发——开发并部署Provider-hosted APP
    SharePoint 2013 开发——Provider-hosted APP准备工作
    (转)CString工作原理和常见问题分析
    WinDbg调试 C# dmp
    使用fastcall 代替汇编hook thiscall
    Windows Socket 编程_单个服务器对多个客户端简单通讯
    IOCP模型与网络编
    非阻塞模式(ioctlsocket)
    GDT与LDT
    常见程序入口点(OEP)特征
  • 原文地址:https://www.cnblogs.com/rulin/p/13034895.html
Copyright © 2011-2022 走看看