首页 > 其他分享 >343. 整数拆分

343. 整数拆分

时间:2023-03-02 19:32:54浏览次数:41  
标签:return int pow 整数 乘以 相乘 拆分 343 Math

给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。

示例 1:

输入: 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。
示例 2:

输入: 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。

 

思路:

  根据贪心算法,就尽量将原数拆成更多的 3

 

如果整数 n 的形式是 3k+1,例如 7。按照上面规则,会拆分成“3 + 3 + 1”。 1 是没作用的。此时,应该将 1 和 3 变成 4,也就是“3 + 3 + 1”变成“3 + 4”。此时乘积最大

   

综上所述,算法的整体思路是:

n 除 3 的结果为 a,余数是 b
当 b 为 0,直接将 a 个 3 相乘
当 b 为 1,将(a-1)个 3 相乘,再乘以 4
当 b 为 2,将 a 个 3 相乘,再乘以 2
​​​​​​​ 

 

class Solution {
    public int integerBreak(int n) {
        /**
        一直 n 不小于 2 且不大于 58。
        贪心: 尽量拆多个3 
            如果余数是1 ,就(n-1)个三,1个四

            n 除 3 的结果为 a,余数是 b
                当 b 为 0,直接将 a 个 3 相乘
                当 b 为 1,将(a-1)个 3 相乘,再乘以 4
                当 b 为 2,将 a 个 3 相乘,再乘以 2 
         */
        if(n==2){
            return 1;
        }
        if(n==3){
            return 2;
        }
       
         int a=n/3;
         int b=n%3;
         if(b==0){
               return (int)( Math.pow(3,a));
         }
         else if(b==1){
             return (int)(4*Math.pow(3,a-1));
         }

         return (int)(b*Math.pow(3,a));
    }
}

 

标签:return,int,pow,整数,乘以,相乘,拆分,343,Math
From: https://blog.51cto.com/u_14689911/6096740

相关文章

  • 刷刷刷 Day 40 | 343. 整数拆分
    343.整数拆分LeetCode题目要求给定一个正整数n,将其拆分为k个正整数的和(k>=2),并使这些整数的乘积最大化。返回你可以获得的最大乘积。示例1输入:n=2输......
  • 数的拆分
      思路:一定能拆成x1的二次方,x2的三次方。当把数分解成质因数乘积后,如果有单独的质数,一定不合理,也就是说如果有质因数,每种质因数最低有两个,从而如果同意质因数大于2......
  • 高精度-----大整数类模板
    代码如下#definemaxn100structBigint{ intlen,a[maxn];//用len记录位数,a记录每个数位 Bigint(intx=0){//通过初始化使得这个大整数能够表示整型x,默认为0 memset......
  • 编写程序数一下 1到 100 的所有整数中出现多少个数字9
    #define_CRT_SECURE_NO_WARNINGS1//防止scanf报警#include<stdio.h>//头文件中包括了各种标准库函数的函数原型//#include<string.h>//C语言标准库中一个常用的头文件,......
  • 算法刷题-求int型正整数在内存中存储时1的个数-JAVA
    0x00引言为获取一个良好的算法思维,以及不再成为一个脚本小子,争取每天一道算法题,培养自己的逻辑思维,温顾各类型语言语法知识。题解只写自己理解的解法,其他解法不再增加。......
  • 算法基础1.2.1整数二分
    前言如果第一次接触二分其实很难理解它的含义我对二分的理解就是找到一个条件,能够保证所有数据对于这个条件要么是True要么是False。二分的作用是查找。二分本质不是单......
  • 397. 整数替换 (Medium
    问题描述397.整数替换(Medium)给定一个正整数n,你可以做如下操作:如果n是偶数,则用n/2替换n。如果n是奇数,则可以用n+1或n-1替换n。返回n变为......
  • 字符串根据逗号拆分转list
    Stringpath="123,456,789"if(path!=null&&path.indexOf(",")!=-1){String[]array=path.split(",");List<String>list=Arrays.asList(array);}/***逗号......
  • linux环境中,如何将一个大文件拆分成多个小文件?
    背景及需求说明: 要对主机上的数据进行迁移,压缩完成之后,发现有将近500G大小的数据,然后没有其他的磁盘了,其他的主机上的空间,也都只有200G左右,所以这个时候......
  • 蓝桥杯备战日志(Python)18-第几个幸运数字-(枚举只含某些因子的整数)
    第几个幸运数字原题到X星球旅行的游客都被发给一个整数,作为游客编号。X星的国王有个怪癖,他只喜欢数字3,5和7。国王规定,游客的编号如果只含有因子:3,5,7就可以获得一......