设计模式:策略模式(Strategy)

23种设计模式-策略(Strategy)设计模式 软考中级-软件设计师 策略设计模式 阅读详情

设计模式:策略模式(Strategy)

策略模式(Strategy)属于行为型模式(Behavioral Pattern)的一种。

行为型模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化。

行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。

通过行为型模式,可以更加清晰地划分类与对象的职责,并研究系统在运行时实例对象之间的交互。在系统运行时,对象并不是孤立的,它们可以通过相互通信与协作完成某些复杂功能,一个对象在运行时也将影响到其他对象的运行。

行为型模式分为类行为型模式和对象行为型模式两种:

  1. 类行为型模式:类的行为型模式使用继承关系在几个类之间分配行为,类行为型模式主要通过多态等方式来分配父类与子类的职责。
  2. 对象行为型模式:对象的行为型模式则使用对象的聚合关联关系来分配行为,对象行为型模式主要是通过对象关联等方式来分配两个或多个类的职责。根据“合成复用原则”,系统中要尽量使用关联关系来取代继承关系,因此大部分行为型设计模式都属于对象行为型设计模式。

模式动机

完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。在软件开发中也常常遇到类似的情况,实现某一个功能有多个途径,此时可以使用一种设计模式来使得系统可以灵活地选择解决途径,也能够方便地增加新的解决途径。

在软件系统中,有许多算法可以实现某一功能,如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法;当然也可以将这些查找算法封装在一个统一的方法中,通过if…else…等条件判断语句来进行选择。这两种实现方法我们都可以称之为硬编码,如果需要增加一种新的查找算法,需要修改封装算法类的源代码;更换查找算法,也需要修改客户端调用代码。在这个算法类中封装了大量查找算法,该类代码将较复杂,维护较为困难。

除了提供专门的查找算法类之外,还可以在客户端程序中直接包含算法代码,这种做法更不可取,将导致客户端程序庞大而且难以维护,如果存在大量可供选择的算法时问题将变得更加严重。

为了解决这些问题,可以定义一些独立的类来封装不同的算法,每一个类封装一个具体的算法,在这里,每一个封装算法的类我们都可以称之为策略(Strategy),为了保证这些策略的一致性,一般会用一个抽象的策略类来做算法的定义,而具体每种算法则对应于一个具体策略类。

模式定义

策略模式又称为政策模式(Policy),属于行为型模式。

策略模式定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化。

模式结构

策略模式(Strategy)包含如下角色:

  • 环境(Context):维护一个对策略对象的引用,负责将客户端请求委派给具体的策略对象执行。环境类可以通过依赖注入、简单工厂等方式来获取具体策略对象。
  • 抽象策略(Strategy):定义了策略对象的公共接口或抽象类,规定了具体策略类必须实现的方法。
  • 具体策略(Concrete Strategy):实现了抽象策略定义的接口或抽象类,包含了具体的算法实现。

策略模式通过将算法与使用算法的代码解耦,提供了一种动态选择不同算法的方法。客户端代码不需要知道具体的算法细节,而是通过调用环境类来使用所选择的策略。

在这里插入图片描述

时序图

在这里插入图片描述

模式实现

环境类 Context.h:

#ifndef _CONTEXT_H_
#define _CONTEXT_H_

#include "Strategy.h"

class Context
{
private:
	Strategy* m_pStrategy;

public:
	void algorithm()
	{
		m_pStrategy->algorithm();
	}
	void setStrategy(Strategy* strategy)
	{
		m_pStrategy = strategy;
	}
	Strategy* getStrategy()
	{
		return m_pStrategy;
	}
};

#endif // !_CONTEXT_H_

抽象策略类 Strategy.h:

#ifndef _STRATEGY_H_
#define _STRATEGY_H_

class Strategy
{
public:
	virtual void algorithm() = 0;
};

#endif // !_STRATEGY_H_

具体策略A类 ConcreteStrategyA.h:

#ifndef _CONCRETE_STRATEGY_A_H_
#define _CONCRETE_STRATEGY_A_H_

#include <iostream>

#include "Strategy.h"

class ConcreteStrategyA : public Strategy
{

public:
	virtual void algorithm()
	{
		std::cout << "use algorithm A" << std::endl;
	}
};

#endif // !_CONCRETE_STRATEGY_A_H_

具体策略B类 ConcreteStrategyB.h:

#ifndef _CONCRETE_STRATEGY_B_H_
#define _CONCRETE_STRATEGY_B_H_

#include <iostream>

#include "Strategy.h"

class ConcreteStrategyB : public Strategy
{

public:
	virtual void algorithm()
	{
		std::cout << "use algorithm B" << std::endl;
	}
};

#endif // !_CONCRETE_STRATEGY_B_H_

在单线程环境下的测试

测试代码:

#include <iostream>
#include <stdlib.h>

#include "Context.h"
#include "ConcreteStrategyA.h"
#include "ConcreteStrategyB.h"
#include "Strategy.h"

using namespace std;

int main(int argc, char* argv[])
{
	Context* cxt = new Context();

	Strategy* s1 = new ConcreteStrategyA();
	cxt->setStrategy(s1);
	cxt->algorithm();

	Strategy* s2 = new ConcreteStrategyB();
	cxt->setStrategy(s2);
	cxt->algorithm();

	delete s1;
	delete s2;
	delete cxt;

	system("pause");
	return 0;
}

运行结果:

在这里插入图片描述

在多线程环境下的测试

略。

模式分析

  • 策略模式是一个比较容易理解和使用的设计模式,策略模式是对算法的封装,它把算法的责任和算法本身分割开,委派给不同的对象管理。策略模式通常把一个系列的算法封装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。
  • 在策略模式中,应当由客户端自己决定在什么情况下使用什么具体策略角色。
  • 策略模式仅仅封装算法,提供新算法插入到已有系统中,以及老算法从系统中“退休”的方便,策略模式并不决定在何时使用何种算法,算法的选择由客户端来决定。这在一定程度上提高了系统的灵活性,但是客户端需要理解所有具体策略类之间的区别,以便选择合适的算法,这也是策略模式的缺点之一,在一定程度上增加了客户端的使用难度。

优缺点

优点:

  1. 策略模式提供了对“开闭原则”的完美支持,用户可以在不修改原有系统的基础上选择算法或行为,也可以灵活地增加新的算法或行为。
  2. 策略模式提供了管理相关的算法族的办法。
  3. 策略模式提供了可以替换继承关系的办法。
  4. 使用策略模式可以避免使用多重条件转移语句。

缺点:

  1. 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
  2. 策略模式将造成产生很多策略类,所有策略类都需要对外暴露。

适用场景

在以下情况下可以使用策略模式:

  • 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。
  • 一个系统需要动态地在几种算法中选择一种。
  • 如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。
  • 不希望客户端知道复杂的、与算法相关的数据结构,在具体策略类中封装算法和相关的数据结构,提高算法的保密性与安全性。

应用场景

  1. Java SE 中的每个容器都存在多种布局供用户选择。
  2. 出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等。
  3. 超市促销可以釆用打折、送商品、送积分等方法。
  4. 当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。

状态模式和策略模式的异同

在这里插入图片描述

在这里插入图片描述

相同点:

  1. 类图、类的结构一样。
    状态模式:Context环境类、State类(抽象状态类、具体状态类)
    策略模式:Context环境类、Strategy类(抽象策略类、具体策略类)
  2. 两种模式都是行为型模式,UML图相同,都是将核心类(State类或Strategy类)注入到Context类中,在客户端通过操作Context环境类间接操作核心类(State类或Strategy类),巧妙的在客户端屏蔽核心类。

不同点:

  1. 状态可以看作是Context类的一个内在属性,是必不可少的,新建Context类对象时,Context类的初始化函数中就要初始化状态属性;策略不是Context的属性,是Context类调用的一个外界的东西。
  2. 状态模式中一定含有“状态切换”逻辑,不管是在ConcreteState类中还是在Context类中,状态类中一定含有“状态切换”代码;策略模式只是简单的在客户端切换策略,核心类(Strategy类)中没有“切换”逻辑。

核心类(State类或Strategy类)是内在属性的时候是状态模式,是外界东西的时候是策略模式。
存在核心类(State类或Strategy类)切换逻辑的是状态模式,不存在的是策略模式。

模板方法模式和策略模式的区别

模板方法模式的主要思想:定义一个算法流程,将一些特定步骤的具体实现、延迟到子类。使得可以在不改变算法流程的情况下,通过不同的子类、来实现“定制”流程中的特定的步骤。

策略模式的主要思想:使不同的算法可以被相互替换,而不影响客户端的使用。

在思想和意图上看,模板方法更加强调:

  1. 定义一条线(算法流程),线上的多个点是可以变化的(具体实现在子类中完成),线上的多个点一定是会被执行的,并且一定是按照特定流程被执行的。
  2. 算法流程只有唯一的入口,对于点的访问是受限的。

策略模式更注重于: 一个“策略”是一个整体的(完整的)算法,算法是可以被整体替换的。而模板方法只能被替换其中的特定点,算法流程是固定不可变的。

模式优点缺点
策略模式横向扩展性好,灵活性高客户端需要知道全部策略,若策略过多会导致复杂度升高
模板方法模式可维护性好,纵向扩展性好耦合性较高,子类无法影响父类公用模块代码

模式扩展

在一个使用策略模式的系统中,当存在的策略很多时,客户端管理所有策略算法将变得很复杂,如果在环境类中使用策略工厂模式来管理这些策略类将大大减少客户端的工作复杂度:

在这里插入图片描述

参考

  1. https://design-patterns.readthedocs.io/zh-cn/latest/behavioral_patterns/behavioral.html
  2. https://www.runoob.com/design-pattern/strategy-pattern.html
  3. https://blog.youkuaiyun.com/weixin_45433817/article/details/131037102
  4. https://blog.youkuaiyun.com/zhaominyong/article/details/106241643
SAP 中配置权限职责菜单并分配给用户的核心流程是:用PFCG 创建 / 维护角色(含菜单、事务码、权限)→ 生成权限参数文件 → 通过 SU01/SU10 将角色分配给用户 SAP权限配置核心流程:1)通过PFCG创建角色,配置菜单事务码及权限对象;2)生成权限参数文件;3)用SU01/SU10分配角色给用户。关键步骤包括:在PFCG中维护菜单结构、设置权限字段值、生成Profile,通过用户比较验证权限。批量分配可用SU10,特殊需求可创建复合角色或自定义权限对象。常见问题需检查权限缺失(SU53)、菜单分配及组织级别设置。流程简化为:创建角色→配置权限→分配用户→验证生效。 阅读详情

相关推荐

PostgreSQL 超详细安装与使用教程:从入门到实战

本文将详细介绍PostgreSQL数据库的安装配置与基础使用。首先从Windows系统安装入手,分步骤讲解17.5版本的安装流程、环境变量配置及服务启动验证。接着重点介绍了pgAdmin4图形化管理工具的安装与使用,包括界面语言设置、数据库连接、创建与管理数据库等操作,同时对比了可视化操作与SQL命令两种方式。最后梳理了PgSQL基础语法,涵盖表的创建、增删改查操作、约束管理等内容,为初学者提供了完整的PostgreSQL入门指南。文章兼顾理论知识与实际操作,既适合数据库新手学习,也可作为开发人员的快速参考

gtf212的博客 1万+

设计模式学习(四):Strategy策略模式

使用Strategy模式可以整体地替换算法。使用Abstract Factory模式则可以整体地替换具体工厂、零件和产品。

m0_49499183的博客 2238

当FPGA遇上Codesys:用Verilog实现ModbusTCP协议栈的3种方法(Xilinx/Vivado实测)

本文详细介绍了在Xilinx FPGA上使用Verilog实现Modbus TCP协议栈的三种方法,并与Codesys环境无缝集成。从基础架构设计到纯Verilog实现、基于AXI总线的混合方案,再到与Codesys的集成方法,为开发者提供了完整的工业自动化通信解决方案。通过实测数据对比,帮助开发者选择最优实现方案。

weixin_29172963的博客 521

设计模式之策略模式(STRATEGY)

1 策略模式简介 名称 Strategy 结构 图2如下: 参与者 抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。 具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现。 环境(Context)类:持有一个策略类的引用,最终给客户端调用。 意图 定义一系列

zhaominyong的专栏 2366

施密特触发电路详细原理介绍

我们想获得矩形脉冲,有种方法是可以采用整形的方法获得矩形脉冲,但前提是可以找到频率和幅度都符合要求的电压信号。 我们设定矩形脉冲的几个指标。 施密特电路是脉冲波形变换中一种常采用的电路,主要有以下两个特点: 1.输入电平从低电平上升过程中电路状态转换为对应的输入电平,与高电平下降过程中对应的输入转换电平不同。 2.通过电路内部的正反馈使输出电压波形的边沿变得很陡。 施密特电路的结构和工作原理 我们先从模电的角度来分析此电路的工作原理。 此电路是通过公共发射极电阻耦合的两级正反馈放大器。 v1输入为低电平

fcxgfdjy的博客 1万+

从OpenClaw到Hermes Agent:AI Agent实战部署与自动化工作流构建

AI Agent(智能体)作为大语言模型(LLM)的能力延伸,其核心原理在于通过工具调用(Tool Calling)与环境交互,使模型从“对话”走向“执行”。这一技术价值在于将自然语言指令转化为具体操作,实现业务流程自动化,从而提升开发与运维效率。在应用场景上,AI Agent广泛适用于自动化运维、智能客服、数据报告生成等重复性任务处理。本文聚焦于两大热门开源框架OpenClaw与Hermes Agent,深入探讨其部署配置、技能扩展及实战联调。通过结合OpenClaw的模块化扩展能力与Hermes Age

weixin_34122810的博客 503

设计模式——Strategy(策略)模式

目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 实际应用举例4.1 Context——List列表和StuContext4.2 具体策略:ConcreteStrategyA和ConcreteStrategyB4.3 测试demo5 总结参考文献 前言 当我们对一个对象的某个操作,比如文本分析或者对象排序有多种算法,但是如果硬编码进它们的类中,将导致出现后续扩展困难,复杂度较高等。策略模式提出了一种方法解决这种情况。 1 定义 Strategy(策略)模式:定义一系列算法,并把它们独立封装到

qq_36566262的博客 1560

Windows下飞桨PaddlePaddle 2.6.1 GPU版环境搭建全攻略(含CUDA 11.7配置避坑指南)

本文详细介绍了在Windows系统下搭建飞桨PaddlePaddle 2.6.1 GPU版环境的完整流程,特别针对CUDA 11.7和cuDNN的安装提供了避坑指南。从Anaconda环境配置、CUDA Toolkit安装到飞桨GPU版的验证,手把手帮助开发者高效完成深度学习环境搭建,解决常见问题并优化性能。

x8y9z0的博客 1094

【设计模式——Strategy模式】

设计模式——Strategy模式

Aseed40424991的博客 546

信创服务器(麒麟 V10 SP3)安装 NVIDIA GeForce RTX 5070 驱动

本文介绍了在麒麟V10 SP3系统上安装NVIDIA RTX 5070显卡驱动的详细步骤。首先需要关闭nouveau驱动,安装必要的编译环境和工具,确保内核版本与kernel-devel完全一致。最后运行NVIDIA驱动安装程序,关键选择包括启用DKMS支持、编译模块、禁用32位兼容和nouveau驱动。整个流程适用于海光CPU和Blackwell架构GPU的国产操作系统环境。

猿小白的博客 672

SAPGUI 与 ADT 的时代分野:在多云架构下,谁还能代表现代 SAP 开发

摘要(149字) SAP开发工具正经历代际更迭:SAPGUI基于专有协议(NI/DIAG)的厚客户端架构难以适配多云环境,而ADT(ABAP Development Tools)通过HTTP(S)协议和Eclipse生态成为ABAP Cloud/RAP开发的唯一入口。关键差异体现在:ADT支持CDS、行为定义等云原生对象建模,天然对齐BTP的零信任网络;集成ATC、Git等DevOps工具链;而SAPGUI无法创建RAP核心对象,在跨平台、自动化方面存在硬限制。官方文档明确将ADT作为Clean Core战

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 390

Java设计模式 Design Pattern:策略模式 Strategy Pattern

意图 Define a family of algorithms, encapsulate each one, and make them interchangeable. 定义一组算法,封装每一个算法,并使他们可以互换 Strategy lets the algorithm vary independently from clients that use it. 策略使得算法可以

OYJJ的专栏 1719

4-20mA电流信号转电压

该电路实现4-20mA电流信号转电压(0.44-2.2V)调理功能,采用两级运放设计:第一级LMH6642MFX进行11倍放大,第二级配置为缓冲器加二阶低通滤波。电路包含10Ω采样电阻、多级RC滤波和ESD防护,具有抗干扰强、功耗低(4mW)等特点,适配3.3V系统ADC采集。通过使能控制MOS管可实现节能模式,适用于工业自动化、环境监测等场景。设计合理平衡了信号精度与功耗,输出电压范围留有充足余量避免饱和。

qq_37999850的博客 303

设计模式:策略模式(Strategy Design Pattern)

个人觉得学习设计模式的话,还是应该注重各种设计模式的应用场景,23种设计模式真的挺多的,要靠死记硬背的话还是没那么容易记住。所以我建议可以在自己实际编码时,套用上各种设计模式。 策略模式是一个很好的例子,如果需要用到大量的if~else判断的话,就可以用到策略模式 我们使用的app大多都有分享的功能,我们可以选择分享到不同的地方,比如微博、微信、QQ等等,虽然是同一个内容,但是分享到不同的平台就会有不同的处理方式,比如要跳转到不同的app或者直接复制链接等等。如果让你来实现这个功能,你会如何实现呢? 用了

weixin_45251189的博客 3712

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Unity 设计模式:策略模式Strategy Pattern的应用

深入理解策略模式Strategy Pattern的应用的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。本文属于《Unity工程师成长之路教程》Unity 设计模式篇(第十一篇)。

输出倒逼输入,写作驱动成长。 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

设计模式:策略模式(Strategy Pattern)

策略模式是一种行为型设计模式,它定义了一系列算法,把它们一个个封装起来,并且使它们可以相互替换。这样,算法的变化不会影响到使用算法的客户。

TechNomad的博客 1262

设计模式十:策略模式(Strategy Pattern)

0、相关文章:=======(阅读量6376)1、详解====1.1、概念定义一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。本模式使得算法可独立于使用它的客户而变化。1.2、使用场景一个类定义了多种行为,并且这些行为在这个类的方法中以多个条件语句的形式出现,那么可以使用策略模式避免在类中使用大量的条件语句。1.3、UML结构图分析可以看到,策略模式中主要有以下几个角色:Strategy 接口,用于定义算法的固定套路。

2501_90425746的博客 1821

设计模式教程:策略模式(Strategy Pattern)

定义一系列算法,将每个算法封装起来,并让它们可以互换,使得算法的变化独立于使用算法的客户。

遇见伯灵说的博客 978

【c++设计模式22】行为模式7:策略模式(Strategy Pattern)

原创作者:郑同学的笔记原创地址:https://zhengjunxue.blog.youkuaiyun.com/article/details/132920283qq技术交流群:921273910# 一、定义策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。客户端代码在运行时选择所需的算法。

junxuezheng的博客 2042

设计模式20:Strategy Pattern (策略模式)

Define:Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it. 一、 策略(Strategy)模式策略模式的用意是针对一组算法,

薛敬明的专栏 1684

Java设计模式详解:策略模式(Strategy Pattern)

策略模式是一种灵活且强大的设计模式,能够帮助开发者将算法与业务逻辑解耦,实现动态切换行为。适用场景:需要动态切换算法、避免复杂条件语句、扩展性强的场景。优点:算法独立、可替换、符合开闭原则。缺点:类数量增加、客户端需了解所有策略类。通过合理使用策略模式,可以显著提升代码的灵活性和可维护性。在实际开发中,策略模式常与工厂模式、代理模式等结合使用,以进一步增强系统的扩展性和可配置性。掌握策略模式,将为你的Java开发之路增添一把利器!

m0_73941339的博客 3787

[图书小结] 深入浅出设计模式:策略模式 The Strategy Pattern

[图书小结] 深入浅出设计模式:策略模式 The Strategy Pattern问题背景继承 (Inheritance) 的局限性 -- The Limitations of Inheritance改用接口 (Interface) 如何 -- How about an Interface?思考分析Design Principle 设计原则1. Encapsulate what varies 抽取出并封装会发生变化的那些2. Program to an interface, not an implement

dev_的博客 192

设计模式精讲 Day 21:策略模式(Strategy Pattern)

策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互换。策略模式让算法的变化独立于使用它的客户端,从而提高系统的灵活性和可维护性。策略模式的核心思想是将算法封装为独立对象,实现算法与使用对象的解耦。通过上下文类统一管理策略,实现动态切换。策略模式适用于多种算法需要动态切换的场景。通过完整 Java 示例,展示了策略模式的实现方式和实际应用。策略模式与工厂模式、命令模式等存在相似之处,但在应用场景上有明显区别。

在未来等你的专栏 676

设计模式十:策略模式(Strategy Pattern)

目录 0、相关文章: 1、详解 1.1、概念 1.2、使用场景 1.3、UML结构图分析 1.4、实际代码分析 1.4.1、传统写法: 1.4.2、策略模式写法: 1.5、优点 2、在Android中的实际运用 0、相关文章: Android的设计模式-策略模式 Android 中的那些策略模式(阅读量6376) 1、详解 1.1、概念 定义一系列的算法,把它...

songzi1228的博客 229

C++ 设计模式:策略模式(Strategy Pattern)

C++ 设计模式:策略模式(Strategy Pattern)

冀晓武的博客 1006

【图解设计模式系列】The Strategy Pattern: 策略模式

11

Tech in Pieces 651
上一篇: Leetcode2391. 收集垃圾的最少总时间
下一篇: Leetcode3128. 直角三角形
UestcXiye
博客等级 码龄8年 9029粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

UestcXiye

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

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

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

打赏作者

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

抵扣说明:

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

余额充值