java数据结构与算法刷题-----LeetCode343. 整数拆分(TODO)

Java实现 LeetCode 343 整数拆分(动态规划入门经典) 343. 整数拆分 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1。 示例 2: 输入: 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。 说明: 你可以假设 n 不小于 2 且不大于 58。 class Solu... 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

很多人觉得动态规划很难,但它就是固定套路而已。其实动态规划只不过是将多余的步骤,提前放到dp数组中(就是一个数组,只不过大家都叫它dp),达到空间换时间的效果。它仅仅只是一种优化思路,因此它目前的境地和线性代数一样----虚假的难。

  1. 想想线性代数,在国外留学的学生大多数不觉得线性代数难理解。但是中国的学生学习线性代数时,完全摸不着头脑,一上来就是行列式和矩阵,根本不知道这玩意是干嘛的。
  2. 线性代数从根本上是在空间上研究向量,抽象上研究线性关系的学科。人家国外的教科书都是第一讲就帮助大家理解研究向量和线性关系。
  3. 反观国内的教材,直接把行列式搞到第一章。搞的国内的学生在学习线性代数的时候,只会觉得一知半解,觉得麻烦,完全不知道这玩意学来干什么。当苦尽甘来终于理解线性代数时干什么的时候,发现人家国外的教材第一节就把这玩意讲清楚了。你只会大骂我们国内这些教材,什么狗东西(以上是自己学完线性代数后的吐槽,我们同学无一例外都这么觉得)。

而我想告诉你,动态规划和线性代数一样,我学完了才知道,它不过就是研究空间换时间,提前将固定的重复操作规划到dp数组中,而不用暴力求解,从而让效率极大提升。

  1. 但是网上教动态规划的兄弟们,你直接给一个动态方程是怎么回事?和线性代数,一上来就教行列式和矩阵一样,纯属恶心人。我差不多做了30多道动态规划题目,才理解,动态方程只是一个步骤而已,而这已经浪费我很长时间了,我每道题都一知半解不理解,过程及其痛苦。最后只能重新做。
  2. 动态规划,一定是优先考虑重复操作与dp数组之间的关系,搞清楚后,再提出动态方程。而你们前面步骤省略了不讲,一上来给个方程,不是纯属扯淡吗?
  3. 我推荐研究动态规划题目,按5个步骤,从上到下依次来分析
  1. DP数组及下标含义
  2. 递推公式
  3. dp数组初始化
  4. 数组遍历顺序(双重循环及以上时,才考虑)
  5. dp数组打印,分析思路是否正确(相当于做完题,检查一下)

在这里插入图片描述

方法一:时间复杂度O( n 2 n^2 n2),空间复杂度O(n)

先理解题目细节

在这里插入图片描述
在这里插入图片描述

  1. 这种解法的思路,就是用dp数组保存小于等于目标值n的,每一个正整数值i,将i依次看做要拆分的数,找出它们每一个的最大乘积情况。最终递推到目标值n.
  2. 上面解析过程中,频繁出现i = j+(i-j) 和 i = j+dp[i-j]。这个初学者会很难理解。
  1. i是我们当前要拆分的数,j是我们这次拆分必须有的数,比如i=10代表我们要拆分10这个数,试图找到它的最大乘积。而我们先从j=1开始枚举,也就是这次拆分,必须拆出一个1,剩下的你随便。再比如j=3时,就是我们这次必须先拆出来一个3,剩下的7你随便怎么拆。
  2. 而如果我们只想拆成2个数,比如10 = 1 + 9. i = 10. 而j = 1就表示我们这次拆出来的两个数里面,其中一个必须是1. 剩下一个数是多少呢?不就是10-1 ==> i-j = 9吗。这就有了10 = 1+(10-1) ==> i = j+(i-j)
  3. 那如果我们想拆成3和数或者更多呢?比如我们i = 10. j = 1,也就是这次必须拆出一个1. 那么剩下的9 我们随便怎么拆都行。拆成5和4,或者2和7,满足条件就行.
  4. 但是题目要求我们要最大情况。也就是说剩下的9,我们必须拆成最大的情况。
  5. 那么dp[9]表示的是什么呢?不就是将9拆分,然后乘起来后的最大情况吗?那么既然i = 10,j = 1,剩下的9我们又要拆分成最大情况。那么直接取dp[10-1] 不就可以了吗。 也就有了i = j+dp[i-j];
  1. 因此,这个解法的关键就是,算出从正整数1~n的每个数拆分后乘积的最大情况,保存到dp[i]中。
  1. 如何拆分:枚举每一种情况,用j表示这次拆分,必须拆出来的一个数。j从1开始一直枚举。显然这里是个可以优化的点。方法二会指出。
  2. 每种情况拆分后:算出乘积后,保留最大值,因为题目要求保留最大情况。
解题思路
  1. 暴力求解的思想,就是从1到n一直尝试每一种值,每一种情况。
  2. 但是如果我们预先将其存储到dp数组,就可以直接通过dp, 获取数据,而不用枚举。典型的动态规划题目
  1. 暴力求解,需要每次对两个东西枚举,这种解法只需对一个东西枚举。第二种方法,不需要枚举。
动态规划思考5步曲
  1. DP数组及下标含义
  1. 我们要求出的是当前数拆分后的数乘起来的最大情况。显然dp数组中存储的就是当前数拆分后的数乘起来的最大情况。要求出谁的?显然是对哪个数拆分。那么下标就是代表对哪个数拆分,很显然,只需要一个下标,也就是一维数组。
  1. 递推公式
  1. 因为一个数最少拆成两个数,所以0和1没法拆成两个正整数,正整数从1开始。故:F(0) = F(1) = 0;
  2. 对于其它数i,都有两种情况,将当前数拆分成两个数,设其中一个数为j,则另一个数是i-j,也就是F(i) = j+(i-j)
  3. 另一种情况就是拆成3个及以上个数。设其中一个为j,则剩下的数是i - j = x。这个x拆分后乘积最大情况,我们已经规划过了,就是F(x). 故:F(i) = j+F(i-j)
  1. dp数组初始化

在这里插入图片描述

  1. 数组遍历顺序(单重循环,无需考虑遍历顺序,一共就一维,哪里来的谁先谁后)
  2. 打印dp数组(自己生成dp数组后,将dp数组输出看看,是否和自己预想的一样。)

在这里插入图片描述

代码:时间复杂度O(n^2).空间复杂度O(n)

在这里插入图片描述

class Solution {
    public int integerBreak(int n) {
        int dp[] = new int[n+1];//从0到n,共n+1个值
        for(int i = 2; i <= n ; i++){//至少拆成两个数,从2开始
            int curMax = 0;//用于保存从拆出一个1开始,每种枚举情况的最大值
            for(int j = 1;j<i;j++) {
                //比较curMax当前枚举最大情况,和现在正在枚举的情况,谁大。保留大的
                curMax = Math.max(curMax,Math.max(j*(i-j),j*dp[i-j]));//当前值有两种拆分方案,拆成两个数,或者多个数
            }
            dp[i] = curMax;//只考虑最大情况
        }
        return dp[n];//我们只需要n的拆分后乘积最大情况
    }
}

方法一优化:时间复杂度O(n* l o g 2 n log_2{n} log2​n)空间复杂度O(n)

我们每次拆分发现,最大情况下,拆出来的值,都相似,相差不多。而且它们都没有超过一半。比如n = 10 拆出的最大情况是4,3,3. 完全超不过它的一半,也就是超不过5
因此,我们枚举j的时候,只需枚举i/2次
在这里插入图片描述

class Solution {
    public int integerBreak(int n) {
        int dp[] = new int[n+1];//从0到n,共n+1个值
        for(int i = 2; i <= n ; i++){//至少拆成两个数,从2开始
            int curMax = 0;//用于保存从拆出一个1开始,每种枚举情况的最大值
            for(int j = 1;j<=i/2;j++) {//根据数学规律,每个数拆分后想要乘积最大情况下。j不可能超过i的一半
                //比较curMax当前枚举最大情况,和现在正在枚举的情况,谁大。保留大的
                curMax = Math.max(curMax,Math.max(j*(i-j),j*dp[i-j]));//当前值有两种拆分方案,拆成两个数,或者多个数
            }
            dp[i] = curMax;//只考虑最大情况
        }
        return dp[n];//我们只需要n的拆分后乘积最大情况
    }
}

方法二:时间复杂度O(n),空间复杂度O(n)

通过数学归纳我们发现,例如10 = 3+4+3,拆分出的数字一个是它们都不会超过10的一半5.另一个它们都与10的一半5,相差2或者3. 也就是必然拆出2和3中的一个。这是大学数学相关课程的内容。如果你还对高数有印象,应该记得函数的极值如何求吧,但这是方法三会用到的。我们这里只是用了数学归纳法。

  1. 同样我们发现,2和3很固定,拆分2后结果为1,拆分3后结果为2.都是自己本身-1,也就是n-1. 所以如果题目要求我们拆分的n = 2或者3,直接返回n-1即可。

在这里插入图片描述

class Solution {
    public int integerBreak(int n) {
        if (n <= 3) {//n给的<=3直接返回n-1.这是它的数学规律
            return n - 1;
        }
        int[] dp = new int[n + 1];
        dp[2] = 1;
        for (int i = 3; i <= n; i++) {//根据规律,拆出的数,最大情况下,都包含3或者2的一个。
            dp[i] = Math.max(Math.max(2 * (i - 2), 2 * dp[i - 2]), Math.max(3 * (i - 3), 3 * dp[i - 3]));
        }
        return dp[n];
    }
}

方法三:时间复杂度O(1),空间复杂度O(1)

导师让我今天这篇文章必须发出来,他晚上给编程小组讲课要用,但是这个方法,我还没想好怎么讲清楚,反正他们参加比赛也用不到这种难度的方法,所以日后补充。

写了两版稿子,依然不知道如何能讲解的通俗易懂,比如下面的驻点,我试图解释清楚,但涉及到了导数的定义和证明,我需要一定时间思考,如何让没学过微积分的人也能看懂。所以下面我先给出用数学做这道题的所需公式和最终代码。学过微积分的都可以很轻松做出来,因为这严格意义来说,难度只是一道高考的导数压轴题,放到考研数学里面,可能放到选择题第一题都让人觉得是送分题。会的人可以直接参考一下,日后我会补充。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

class Solution {
    public int integerBreak(int n) {

        if(n <= 3) return n - 1;

        int a = n / 3, b = n % 3;

        if(b == 0) return (int)Math.pow(3, a);

        if(b == 1) return (int)Math.pow(3, a - 1) * 4;

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

    }
}
leetcode343-LeetCode:LeetCodeJava解题 第 343 章LeetCode解题笔记 代码请于src目录笔记见笔记目录下文档README 不更新了,直接提交。。。 2017.12.14 232. 使用栈实现队列221.最大平方 2017.11.26 165.比较版本号275.H-指数II 274.H-指数162. 查找峰值元素 2017.11.25 215. 数组中的第 K 个最大元素 2017.11.17 14.最长公共前缀 2017.11.16 226. 反转二叉树223.矩形区域 2017.11.13 349. 两个数组的交集 2017.11.9 209.最小尺寸子数组和 2017.11.8 240. 搜索二维矩阵 II 242.有效字谜 2017.11.5 137.单数二 2017.11.4 153. 在旋转排序数组中求最小值 2017.11.2 144.二叉树先序遍历 2017.11.1 80.从排序数组中删除重复项 II 94.二叉树中序遍历77.组合 2017.10.31 69.Sqrt(x) 48.旋转图像 2017.10.30 46.排列 2017.10.29 40.组合和II 39.组合和112.路径和 201 立即下载

相关推荐

Oracle EBS R12.2 安装 -- Step by Step

Oracle EBS R12.2 安装 -- Step by Step

Albert Tan DBA之路 1514

整数划分

1.问题描述 输入: 每组输入是两个整数n和k。(1  输出: 对于每组输入,请输出六行。  第一行: 将n划分成若干正整数之和的划分数。  第二行: 将n划分成k个正整数之和的划分数。  第三行: 将n划分成最大数不超过k的划分数。  第四行: 将n划分成若干奇正整数之和的划分数。  第五行: 将n划分成若干不同整数之和的划分数。  第六行: 打印一个空行。 算法思想:

seeCrazy的专栏 2448

信号与系统——卷积、相关运算与FFT关系以及工程应用(三)

卷积运算、相关运算

qq_35028634的博客 6613

整数拆分,LeetCode 343题 ,Java实现

整数拆分问题, 求最有值,具有最优子结构,具有重叠自问题 --->符合动态规划模型 通过自底向下的方式,把计算过的自问题结果保存起来,减少运算次数。 /** * 整数划分问题 * 动态规划, * 要分析清楚, * 几个特点:1,求最优值,2,最优子结构,3,重叠子问题 * 子问题的答案先存起来 */ public class Main343 { public i...

aa792978017的博客 1466

Keil MDK编译错误#541解决方案与ARM_Compiler包解析

在嵌入式开发中,编译器工具链的依赖管理是确保项目顺利构建的关键环节。以Keil MDK为例,其软件包依赖机制通过组件化设计实现功能解耦,其中ARM_Compiler包专门处理系统IO重定向等编译器扩展功能。这种架构既提升了模块复用性,也带来了版本兼容性挑战。当出现'Error #541: component missing'报错时,通常是由于中间件组件(如文件系统)在新版本中显式依赖了ARM_Compiler包。开发者需要通过Pack Installer安装该包,并在Run-Time Environment

weixin_32129187的博客 369

Nacos 从困惑到蒙圈(9)Nacos 适配 达梦数据库【最新版】

介绍Nacos适配达梦数据库的详细步骤,包括对最新版本的支持改造。

甘蓝的专栏 1380

leetcode343---整数拆分

leetcode343—整数拆分原题链接 题意简述 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1。 示例 2: 输入: 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。 说明: 你可以假设 n 不小于 2 且...

Again的博客 342

操作系统实验一到实验九合集(哈工大李治军)

操作系统实验一到实验九合集(哈工大李治军) 有详细代码及注释,程序已在本地测试,均能跑通

leoabcd12的博客 5万+

递归算法之整数划分问题

问题描述 将正整数n表示成一系列正整数之和, n = n1 + n2 + n3 +…+nk (其中ni为正整数,1<=ni<=n) 举例说明, n = 4的情况下,共有5种划分情况 4 = 4 4 = 3 + 1 4 = 2 + 2 4 = 2 + 1 + 1 4 = 1 + 1 + 1 + 1 注意:这里的1 + 3 和3 + 1被认为是同一种划分情况。 问题分析 首先引入一个表示方式q(n,m) 它的含义是,在正整数n的划分中,将最大加数不大于m的划分数表示为q(n,m)。 这里根据m的不

m0_48774275的博客 1334

华为OD机试 C++【TLV解析】

这里的valueOffset指的是value在整串消息里的起始位置(从0开始数)。这表示tag是15(十六进制的0F),length是4,接着的8个字符是value的内容。你收到了一串由两端设备传递的TLV格式的消息,现在你需要根据这串消息生成一个对应的(tag, length, valueOffset)列表。tag是15,对应的数据长度为4,value从第3个字节开始,所以偏移量为2。第二行:一个数字n,表示我们给出的tag的数量(0 < n < 1000)。第一行:一串消息,长度不超过10000。

wtswts1232的博客 482

Android12 适配 usb 触屏

在 Android 系统中,输入设备 IDC(Input Device Configuration)设备描述文件(.idc)是用于配置和定义输入设备行为和属性的文本文件。 该文件通常在`/system/usr/idc/` 或 `/vendor/usr/idc/`,具体位置因芯片厂商SDK而异。一般情况此类文件是预置到系统,开发者 root 权限才能修改这些文件。输入设备 IDC 设备描述文件在 Android 系统中起到了识别、配置、映射和定制输入设备的作用,使得系统能够准确解析和处理各种输入设备的事件,提

weixin_35723192的博客 1234

[C++]Leetcode超高效刷题顺序及题目详解笔记(持续更新中)

一.引言 博主最近在LeetCode上用C++练习。一路走来踩过一些坑,做了一些总结和笔记,分享给需要的人。 LeetCode网址:https://leetcode.com/ LeetCode中文版:https://leetcode-cn.com/ 二.刷题指南 LeetCode 是一个非常棒的平台,收集了许多公司的面试题目。相对其他平台而言,有着下面的几个优点: 题目全部来自业内大公司的真实面试不用处理输入输出 精力全放在解决具体问题上题目有丰富的讨论 可以参考别人的思路精确了解自己代码在所有提交代码中

cpb____的博客 2万+

msfvenom制作windows/linux/android/ios木马

msfvenom选项如下 -p, --payload<payload> 指定 payload(攻击荷载)。如果使用自定义payload,请使用'-'或者stdin指定。 -l, --list [module_typel列出指定模块的所有可用资源。模块类型包括:payloads, encoders, nops, all -n, --nopsled <length>为payload预先指定一个NOP滑动长度。 -f, --format <format>指定输出格式(使

Cwillchris的博客 2735

【中等】力扣算法题解析LeetCode343:整数拆分

题目要求将正整数 n 拆分为至少两个数的和,使其乘积最大。通过数学分析发现,最优解优先拆分为多个3(如6=3+3比2+2+2更优)。两种解法: 数学法(O(1)):根据 n%3 余数处理,余1时组合成4(3×1<4),余2直接乘2。 动态规划(O(n²)):用 dp[i] 记录拆分 i 的最大乘积,内层循环优化至 i/2。 代码亮点:数学法高效简洁,动态规划通用性强。输入范围2≤n≤58,边界如n=2(积1)、n=10(积36)。

ylumwd的博客 988

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

力扣343-整数拆分(Java详细题解)

然后我们是要得到dp[i] 的最大值 所以我们的递推公式就是dp[i] = Math.maxa(dp[i],Math.max((j * (i - j),j * dp[i - j]))。我们先看看dp数组,dp[i] = Math.maxa(dp[i],Math.max((j * (i - j),j * dp[i - j]))。dp[i]是需要dp[i - j]的状态,即需要他前面的状态,所以遍历顺序一定是从前向后遍历,现有dp[i - j]再有dp[i]。dp[i]就是指将i拆分后获得的最大乘积。

2302_79761426的博客 1197

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LeetCode刷题汇总

剑指offer 剑指 Offer 03 数组中重复的数字 剑指 Offer 04 二维数组中的查找 剑指 Offer 05 替换空格 剑指 Offer 06 从尾到头打印链表 剑指 Offer 07 重建二叉树 剑指 Offer 09 用两个栈实现队列 剑指 Offer 10- I 斐波那契数列 剑指 Offer 10- II 青蛙跳台阶问题 剑指 Offer 11 旋转数组的最小数字 剑指 Offer 12 矩阵中的路径 剑指 Offer 13 机器人的运动范围 剑指 Offer 14- I 剪绳子 剑指

weixin_44171872的博客 2万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

343. 整数拆分

本文介绍了LeetCode 343题 ;整数拆分 ;的动态规划解法。通过定义dp[i]表示整数i拆分后的最大乘积,采用双层循环结构:外层遍历目标数i(3到n),内层遍历拆分点j(1到i/2)。状态转移方程为dp[i] = max(j*(i-j), j*dp[i-j]),既考虑拆分为两个数的情况,也考虑继续拆分的情况。初始化dp[2]=1后,逐步填充dp数组,最终返回dp[n]作为结果。文章还通过n=10的实例验证了算法正确性,并指出可通过数学规律(尽可能拆分为3)进一步优化。该解法展示了动态

mrjieke6的博客 767

leetcode每日一题:343. 整数拆分

😚一个不甘平凡的普通人,日更算法学习和打卡,期待您的关注和认可,陪您一起学习打卡!!!😘😘😘系列:动态规划语言:java难度:中等题目来源:Leetcode343. 整数拆分。

Jing_Hua 840

【leetcode刷题】71.数组拆分 I——Java版

排序

公号:一条coding 1万+

LeetCode 343. 整数拆分(DP)

1. 题目 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1。 示例 2: 输入: 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。 说明: 你可以假设 n 不小于 2 且不大于 58。 来源:力扣(LeetCo...

Michael是个半路程序员 1329

力扣343 整数拆分 java实现

摘要:本文探讨如何将正整数n拆分为至少两个正整数之和,使其乘积最大化。通过动态规划方法,建立状态转移方程res[i] = max(res[i], max((i-j)*j, res[i-j]*j)),其中j从1到i-1遍历。示例显示n=10时最优解为3×3×4=36。算法时间复杂度O(n²),空间复杂度O(n),适用于2≤n≤58的情况。

m0_58648798的博客 962

leetcode刷题记录

刷题过程记录

洪肥肥的博客 2063

LeetCode 343. 整数拆分 DP

LeetCode 343. 整数拆分 DP 题目 343. 整数拆分 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1。 示例 2: 输入: 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。 说明: 你可以假设 n 不小于 2 且不大于 58。 通过次数47,378提交次数81,471 思路 类似于Fib,第n个数

qq_42499133的博客 233

LeetCode - 数学 - 343. 整数拆分

题目 343. 整数拆分 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1。 示例 2: 输入: 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。 说明: 你可以假设 n 不小于 2 且不大于 58。 简单介绍: 难度:中等 使用语言:JAVA。 这道题来自leetcode题库的数学标签。 解题思路: 首先看题、分

-happy 的博客 396

LeetCode:343. 整数拆分

LeetCode:343. 整数拆分

xiaoshiguang3的博客 591
上一篇: java数据结构与算法刷题-----LeetCode303. 区域和检索 - 数组不可变
下一篇: 每日一篇英语文章分享:I have a dream. 争取早日阅读论文自由.
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值