当前位置: 首页 > news >正文

Datawhale学习笔记AI +新能源:电动汽车充电站充电量预测

赛题介绍

建立站点充电量预测模型,根据充电站的相关信息和历史电量数据,准确预测未来某段时间内充电站的充电量需求。
在赛题数据中,我们提供了电动汽车充电站的场站编号、位置信息、历史电量等基本信息。我们鼓励参赛选手在已有数据的基础上补充或构造额外的特征,以获得更好的预测性能

赛题任务

根据赛题提供的电动汽车充电站多维度脱敏数据,构造合理特征及算法模型,预估站点未来一周每日的充电量。(以天为单位),属于典型的回归问题。

数据集

本赛题提供的数据集包含三张数据表。
其中,power_forecast_history.csv 为站点运营数据,power.csv为站点充电量数据,stub_info.csv为站点静态数据,训练集为历史一年的数据,测试集为未来一周的数据。
以下是本次赛题数据集的字段说明:
在这里插入图片描述
数据集下载
在这里插入图片描述

评估指标

评估指标:RMSE(均方根误差)
在这里插入图片描述
均方根误差是预测值与真实值偏差的平方与观测次数n比值的平方根。
衡量的是预测值与真实值之间的偏差,并且对数据中的异常值较为敏感,受异常值的影响更大,所以要想好如何处理异常值上分。
常用于评测回归任务,常用来作为机器学习模型预测结果衡量的标准。
与MSE的区别
MSE是真实值与预测值的差值的平方然后求和平均。通过平方的形式便于求导,所以常被用作线性回归的损失函数。
MAE对异常值不敏感,但它不能反映预测误差的分布情况。
RMSE放大了较大误差之间的差距,此外,RMSE计算后的结果与实际值的单位相同,而MSE的结果是实际值单位的平方。因此,如果我们要直观地了解模型的预测误差,通常会使用RMSE作为指标。

提交示例

在这里插入图片描述

过拟合与欠拟合

在这里插入图片描述
第一个欠拟合,第二个正常,第三个过拟合
欠拟合:欠拟合是指模型不能在训练集上获得足够低的误差。换句换说,就是模型复杂度低,模型在训练集上就表现很差,没法学习到数据背后的规律。
如何解决欠拟合?
欠拟合基本上都会发生在训练刚开始的时候,经过不断训练之后欠拟合应该不怎么考虑了。但是如果真的还是存在的话,可以通过增加网络复杂度或者在模型中增加特征,这些都是很好解决欠拟合的方法。
过拟合:过拟合是指训练误差和测试误差之间的差距太大。换句换说,就是模型复杂度高于实际问题,模型在训练集上表现很好,但在测试集上却表现很差。模型对训练集"死记硬背"(记住了不适用于测试集的训练集性质或特点),没有理解数据背后的规律,泛化能力差
为什么会出现过拟合现象?
造成原因主要有以下几种:

  • 训练数据集样本单一,样本不足。如果训练样本只有负样本,然后那生成的模型去预测正样本,这肯定预测不准。所以训练样本要尽可能的全面,覆盖所有的数据类型。
  • 训练数据中噪声干扰过大。噪声指训练数据中的干扰数据。过多的干扰会导致记录了很多噪声特征,忽略了真实输入和输出之间的关系。
  • 模型过于复杂。模型太复杂,已经能够“死记硬背”记下了训练数据的信息,但是遇到没有见过的数据的时候不能够变通,泛化能力太差。我们希望模型对不同的模型都有稳定的输出。模型太复杂是过拟合的重要因素。

如何解决过拟合?
要想解决过拟合问题,就要显著减少测试误差而不过度增加训练误差,从而提高模型的泛化能力。我们可以使用正则化(Regularization)方法。

常用的正则化方法根据具体的使用策略不同可分为:(1)直接提供正则化约束的参数正则化方法,如L1/L2正则化;(2)通过工程上的技巧来实现更低泛化误差的方法,如提前终止(Early stopping)和Dropout;(3)不直接提供约束的隐式正则化方法,如数据增强等。
正常拟合:模型的正常拟合是指训练得到的模型,可以从训练数据集上学习得到了泛化能力强、预测误差小的模型,同时该模型还可以针对待测试的数据进行良好的预测,获得令人满意的预测效果。
三种情况在训练数据集上的预测误差的表现形式为:欠拟合>正常拟合>过拟合;而在测试集上的预测误差形式为:欠拟合>过拟合>正常拟合。

所以下面这张也是第一个欠拟合,第二个正常拟合,第三个过拟合
在这里插入图片描述

在机器学习中,以下哪些技术是数据清洗的相关技术?
A去除重复数据
B处理缺失数据
C异常值处理
D数据标准化/归一化
数据清洗是将重复、多余的数据筛选清除,将缺失的数据补充完整,将错误的数据纠正或者删除,最后整理成为我们可以进一步加工、使用的数据。
数据清洗的一般步骤:分析数据、缺失值处理、异常值处理、去重处理、噪音数据处理。在大数据生态圈,有很多来源的数据ETL工具,但是对于公司内部来说,稳定性、安全性和成本都是必须考虑的。

baseline解读

对于常见的时序问题,我们可以采用历史平移、滑窗统计,尽可能的提取时间特征等方法进行特征工程。
在这里插入图片描述

增加工作日非工作日特征

df['weekday'] = df_copy[col].dt.weekday
df['is_weekend'] = df['weekday'].isin([5, 6]).astype(int)
df['is_workday'] = (df['weekday'] < 5).astype(int)

增加小时,分钟特征

df_copy[prefix + 'hour'] = df_copy[col].dt.hour
df_copy[prefix + 'minute'] = df_copy[col].dt.minute

相对时间差特征

df['diff_from_start'] = (df_copy[col] - df_copy[col].iloc[0]).dt.days
df['diff_to_end'] = (df_copy[col].iloc[-1] - df_copy[col]).dt.days

构建了历史平移特征、差分特征、和窗口统计特征
(1)历史平移特征:通过历史平移获取上个阶段的信息;

(2)差分特征:可以帮助获取相邻阶段的增长差异,描述数据的涨减变化情况。在此基础上还可以构建相邻数据比值变化、二阶差分等;

(3)窗口统计特征:窗口统计可以构建不同的窗口大小,然后基于窗口范围进统计均值、最大值、最小值、中位数、方差的信息,可以反映最近阶段数据的变化情况。

# 合并训练数据和测试数据
df = pd.concat([train_df, test_df], axis=0).reset_index(drop=True)# 历史平移
for i in range(7,36):df[f'power_shift{i}'] = df.groupby('id_encode')['power'].shift(i)window_size = 7# 历史平移 + 差分特征
for i in range(1,4):df[f'power_shift7_diff{i}'] = df.groupby('id_encode')['power_shift7'].diff(i)# 窗口统计
for win in [7,14,28,35,50,70]:df[f'power_win{win}_mean'] = df.groupby('id_encode')['power'].rolling(window=win, min_periods=3, closed='left').mean().valuesdf[f'power_win{win}_median'] = df.groupby('id_encode')['power'].rolling(window=win, min_periods=3, closed='left').median().valuesdf[f'power_win{win}_max'] = df.groupby('id_encode')['power'].rolling(window=win, min_periods=3, closed='left').max().valuesdf[f'power_win{win}_min'] = df.groupby('id_encode')['power'].rolling(window=win, min_periods=3, closed='left').min().valuesdf[f'power_win{win}_std'] = df.groupby('id_encode')['power'].rolling(window=win, min_periods=3, closed='left').std().values# 历史平移 + 窗口统计
for win in [7,14,28,35,50,70]:df[f'power_shift7_win{win}_mean'] = df.groupby('id_encode')['power_shift7'].rolling(window=win, min_periods=3, closed='left').mean().valuesdf[f'power_win{win}_median'] = df.groupby('id_encode')['power'].rolling(window=win, min_periods=3, closed='left').median().valuesdf[f'power_shift7_win{win}_max'] = df.groupby('id_encode')['power_shift7'].rolling(window=win, min_periods=3, closed='left').max().valuesdf[f'power_shift7_win{win}_min'] = df.groupby('id_encode')['power_shift7'].rolling(window=win, min_periods=3, closed='left').min().valuesdf[f'power_shift7_win{win}_sum'] = df.groupby('id_encode')['power_shift7'].rolling(window=win, min_periods=3, closed='left').sum().valuesdf[f'power_shift7_win{win}_std'] = df.groupby('id_encode')['power_shift7'].rolling(window=win, min_periods=3, closed='left').std().values

lgbm参数详解

# 定义lightgbm参数params = {'boosting_type': 'gbdt',#提升树的类型。值为 'gbdt' 表示梯度提升决策树'objective': 'regression',#损失函数。这里是回归问题,所以选用回归损失函数,即 'regression'。'metric': 'rmse',#评价指标。衡量模型性能的指标,这里使用均方根误差(RMSE)作为评价指标。'min_child_weight': 5,#一个叶子节点最小的样本权重和。用来控制过拟合。如果这个值过高,则会导致欠拟合,反之则会导致过拟合。'num_leaves': 2 ** 5,#决策树上的叶子节点数。这个参数通常比较敏感,其值越大,模型越复杂,容易过拟合。'lambda_l2': 10,#L2 正则化系数。增加这个值可以减少模型的复杂度,防止过拟合。'feature_fraction': 0.8,#训练每棵树时,使用的特征比例。设置该参数可以防止过拟合,提高模型的泛化能力。'bagging_fraction': 0.8,#构造每棵树所使用的数据比例,通常选取比较小的值,和 feature_fraction 一起使用,可以控制模型的复杂度。'bagging_freq': 4,#执行 bagging 操作的频率。设置为 0 表示不使用 bagging 操作。'learning_rate': 0.05,#学习率。控制每次迭代调整的步长。如果设置的学习率过大,则可能无法收敛,如果设置的学习率过小,则可能需要较长时间才能得到最终结果。'seed': 2023,#随机种子。设定一个随机种子,可以保证结果的可重复性。'nthread' : 16,#线程数。LGBM 中多线程并行计算提高了训练速度,该参数用来指定线程数。'verbose' : -1,#是否打印调试信息。设置为 -1 时不打印任何信息。# 'device':'gpu'}

lgbm参数详解

pandas_profiling简介

python库:pandas_profiling,这个库只需要一行代码就可以生成数据EDA报告。
基于pandas的DataFrame数据类型,可以简单快速地进行探索性数据分析
对于数据集的每一列,pandas_profiling会提供以下统计信息:
1、概要:数据类型,唯一值,缺失值,内存大小
2、分位数统计:最小值、最大值、中位数、Q1、Q3、最大值,值域,四分位
3、描述性统计:均值、众数、标准差、绝对中位差、变异系数、峰值、偏度系数
4、最频繁出现的值,直方图/柱状图
5、相关性分析可视化:突出强相关的变量,Spearman, Pearson矩阵相关性色阶图

并且这个报告可以导出为HTML,非常方便查看。对不太熟悉python数据分析的新手来说十分友好。
安装:

pip install pandas-profiling

使用pandas_profiling生成数据探索报告:

report = pp.ProfileReport(data)
report

导出为html文件

report.to_file('report.html')

“H3” 是一个用于地理空间索引和网格系统的开源库。它将地球表面划分为一系列分辨率逐渐变粗的六边形单元格,每个单元格都有唯一的标识符,称为 H3 地址。H3 地址可以表示不同级别的地理区域,例如国家、城市、街区等。

要将 H3 地址转换为地理坐标(经度和纬度),可以使用 H3 库中的函数
安装

pip install h3-python

示例代码

import h3h3_address = '8928308280fffff'  # 示例 H3 地址coordinates = h3.h3_to_geo(h3_address)latitude = coordinates[0]
longitude = coordinates[1]print("Latitude:", latitude)
print("Longitude:", longitude)

数据探索

fromDatawhale直播一禧助教

df['new_date'] = pd.to_datetime(df['ds']* 100 + df['ds_hour'].astype(int), format='%Y%m%d%H')
df['ds_date'] = df['new_date'].dt.date
############################ 绘图函数
def my_plot(df, id_encode, start_date, end_date, groupby, predict=False): # 绘制折线图fig = plt.figure(figsize=(20,10))df = df.loc[(df['ds'] >= start_date) & (df['ds'] <= end_date)]if id_encode > -1:df = df.loc[df['id_encode'] == id_encode]else:passif groupby == 'hour':plt.plot(df['new_date'], df['power'], color = 'blue')if predict == True:plt.plot(df['new_date'], df['power_pre'], color = 'red')try:plt.plot(df['new_date'], df['temp_max'], color = 'brown')plt.plot(df['new_date'], df['temp_min'], color = 'green')except:passelif groupby == 'day':df_power = df.groupby(by = 'ds_date')['power'].sum().reset_index()plt.plot(df_power['ds_date'], df_power['power'], color = 'blue')if predict == True:df_power_pre = df.groupby(by = 'ds_date')['power_pre'].sum().reset_index()plt.plot(df_power_pre['ds_date'], df_power_pre['power_pre'], color = 'red')# 添加标题和轴标签plt.title('Power vs Date')plt.xlabel('Date')plt.ylabel('Power')# 显示图形plt.show()

我这里按照助教说的画了两个图

my_plot(df, id_encode=-1, start_date=20220401, end_date=20230610, groupby='day')

在这里插入图片描述
202301应该是春节期间大年30大家都回乡下城市的充电量下降

my_plot(df, id_encode=-1, start_date=20230301, end_date=20230610, groupby='day')

在这里插入图片描述
20230322是因为寒潮所以有所下降

然后助教还说了可以将h3转换为经纬度,但因为我这边不太懂暂时还没有尝试这种方法
我这边使用sklearn库中的LabelEncoder类来对数据进行标签编码(Label Encoding)操作

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
train_df['h3'] = le.fit_transform(train_df['h3'])
test_df['h3'] = le.fit_transform(test_df['h3'])

但是似乎效果不是特别好

相关文章:

Datawhale学习笔记AI +新能源:电动汽车充电站充电量预测

赛题介绍 建立站点充电量预测模型&#xff0c;根据充电站的相关信息和历史电量数据&#xff0c;准确预测未来某段时间内充电站的充电量需求。 在赛题数据中&#xff0c;我们提供了电动汽车充电站的场站编号、位置信息、历史电量等基本信息。我们鼓励参赛选手在已有数据的基础上…...

记一次fineBI的增量删除更新BUG

官方文档链接是https://help.fanruan.com/finebi/doc-view-1663.html 按照官方文档&#xff0c;增量删除不能使用select * &#xff0c;且需要指定分区建 但实际指定分区键有时候也会报错&#xff0c;因为表设置的字段有时候会比数据源少&#xff0c;此时会报错&#xff0c;提…...

rsync+inotify实时同步+双向同步

准备主机 192.168.1.247 &#xff08;源&#xff09; /home/appdata 192.168.1.248 &#xff08;目的&#xff09; /home/appdata 实现效果&#xff1a; 1.用rsync手动将192.168.1.247 的/home/appdata同步到192.168.1.248的/home/appdata目录。 2.用inotify组件实现文件的…...

7.继承与多态 对象村的优质生活

7.1 民法亲属篇&#xff1a;继承&#xff08;inheritance&#xff09; 了解继承 在设计继承时&#xff0c;你会把共同的程序代码放在某个类中&#xff0c;然后告诉其他的类说此类是它们的父类。当某个类继承另一个类的时候&#xff0c;也就是子类继承自父类。以Java的方式说&…...

机器视觉、图像处理和计算机视觉:概念和区别

机器视觉、图像处理和计算机视觉&#xff1a;概念和区别 机器视觉、图像处理和计算机视觉是相关但有区别的概念。 机器视觉主要应用于工业领域&#xff0c;涉及图像感知、图像处理、控制理论和软硬件的结合&#xff0c;旨在实现高效的运动控制或实时操作。 图像处理是指利用…...

从零开始的C语言学习第二十课:数据在内存中的存储

目录 1. 整数在内存中的存储 2. 大小端字节序和字节序判断 2.1 什么是大小端&#xff1f; 2.2 为什么有大小端? 3. 浮点数在内存中的存储 3.1 浮点数存的过程 3.2 浮点数取的过程 1. 整数在内存中的存储 在讲解操作符的时候&#xff0c;我们就讲过了下⾯的内容&#x…...

分布式内存计算Spark环境部署与分布式内存计算Flink环境部署

目录 分布式内存计算Spark环境部署 1. 简介 2. 安装 2.1【node1执行】下载并解压 2.2【node1执行】修改配置文件名称 2.3【node1执行】修改配置文件&#xff0c;spark-env.sh 2.4 【node1执行】修改配置文件&#xff0c;slaves 2.5【node1执行】分发 2.6【node2、no…...

am权限系统对接笔记

文章目录 角色如何对应机构如何对应 am需要提供的接口机构、角色、人员查关系 消息的交互方式方式1 接口查询方式2 mq推送消息到业务系统 am是一套通用权限管理系统。 为什么要接入am呢? 举例&#xff0c;甲方有10个供方&#xff0c;每个供方都有单独的权限系统&#xff0c;不…...

回首往昔,初学编程那会写过的两段愚蠢代码

一、关于判断两个整数是否能整除的GW BASIC创意代码 记得上大学时第一个编程语言是BASIC&#xff0c;当时Visual Basic还没出世&#xff0c;QBASIC虽然已经在1991年随MS-DOS5.0推出了&#xff0c;但我们使用的还是 GW-BASIC&#xff0c; 使用的教材是谭浩强、田淑清编著的《BA…...

《Java面向对象程序设计》学习笔记——Java程序填空题

​笔记汇总&#xff1a;《Java面向对象程序设计》学习笔记 这些题其实都非常滴简单&#xff0c;相信大伙能够立刻就秒了吧&#x1f60e; 文章目录 题目答案 题目 以下程序要求从键盘输入一个整数&#xff0c; 判别该整数为几位数&#xff0c; 并且输出结果&#xff0c; 请将下…...

Chrome跨域访问网络请求Cookies丢失的解决办法

为了保障网络安全,Chrome对跨域访问有一定的限制。一般分为三级: cookies带有“SameSite=Strict”时,只允许访问同一个域名下的网络请求;cookies带有“SameSite=Lax”时,允许访问同一个域名下的网络请求和同一个根域名下的网络请求;cookies带有“SameSite=None”时,允许…...

从创业者的角度告诉你AI问答机器人网页的重要性

在数字化时代&#xff0c;创业者面临着越来越多的挑战。而AI问答机器人网页正成为创业者们的必备工具。它可以提供即时客户支持、降低运营成本&#xff0c;并实现全天候服务。接下来&#xff0c;我将从创业者的角度阐述一下&#xff0c;AI问答机器人网页为什么那么重要&#xf…...

大数据Flink(九十七):EXPLAIN、USE和SHOW 子句

文章目录 EXPLAIN、USE和SHOW 子句 一、EXPLAIN 子句 二、USE 子句...

浏览器中的网络钓鱼防护

网络钓鱼防护是一项功能&#xff0c;可保护用户免受旨在窃取其敏感信息的网络钓鱼攻击&#xff0c;网络钓鱼是网络犯罪分子常用的技术&#xff0c;这是一种社会工程攻击&#xff0c;诱使用户单击指向受感染网页的恶意链接&#xff0c;用户在该网页中感染了恶意软件或其敏感信息…...

每日温度00

题目链接 每日温度 题目描述 注意点 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替1 < temperatures.length < 100000 解答思路 使用单调栈解决本题&#xff0c;思路为&#xff1a…...

【JVM】JVM的垃圾回收机制

JVM的垃圾回收机制 对象死亡判断方法引用计数算法可达性分析算法 垃圾回收算法标记清除法复制算法标记整理算法分代算法 Java运行时内存的各个区域,对于程序计数器,虚拟机栈,本地方法栈这三个部分区域而言,其生命周期与相关线程有关,随线程而生,随线程而灭,并且这三个区域的内存…...

28栈与队列-单调队列

目录 LeetCode之路——239. 滑动窗口最大值 解法一&#xff1a;暴力破解 解法二&#xff1a;单调队列 LeetCode之路——239. 滑动窗口最大值 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k …...

qt软件崩溃的分析方法-定位源文件和行号

软件&#xff08;debug版exe或者release版exe&#xff09;在正常运行状态下&#xff08;不是gdb调试运行&#xff09;&#xff0c;如果软件崩掉&#xff0c;那么会直接闪退&#xff0c;软件什么也做不了&#xff0c;此时无法保存软件中的状态信息&#xff0c;此外&#xff0c;也…...

《实验细节》上手使用PEFT库方法和常见出错问题

《实验细节》上手使用PEFT库方法和常见出错问题 安装问题常用命令使用方法保存peft模型加载本地 peft 模型使用问题问题1 ValueError: Please specify target_modules in peft_config安装问题 首先给出用到的网站 更新NVIDIA网站https://www.nvidia.com/Download/index.aspx 2…...

软考高级系统架构论文 注意事项

目录 前言正文 前言 论文主要体现 分析问题的能力以及解决问题的能力 正文 论文必要的点&#xff1a; 虚构情节、文章中有较严重的不真实或者不可信的内容出现的论文;没有项目开发的实际经验、通篇都是浅层次纯理论的论文;所讨论的内容与方法过于陈|旧&#xff0c;或者项目…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...