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

字母板上的路径[提取公共代码,提高复用率]

提取公共代码

  • 前言
  • 一、字母版上的路径
  • 二、贪心
    • 1、idea
    • 2、go
    • 3、代码不断拆分复用的过程
  • 总结
  • 参考文献

前言

写代码,在提高效率的同时,要方便人看,这个人包括自己。大函数要拆分成一些小函数,让每个函数的宏观目的和步骤都显得清晰,读起来才容易懂。除此之外,拆分也有讲究,提取公共代码,尽量减少重复无意义的代码,提高复用率。

一、字母版上的路径

在这里插入图片描述

二、贪心

1、idea

// 根据字母的ascall码可以确定它在board中的坐标。
// a - 97 == v,<x = v / 5,y = v % 5>
// cur:<0,0> t: <x,y>
// 前5行,先x或者y都无所谓
// 前五行到第6行,只能先y再x
// 第6行到前5行,只能先x再y

2、go

func alphabetBoardPath(target string) string {sb := &strings.Builder{}n := len(target)x,y := 0,0upDown,LeftRight := [2]byte{'U','D'},[2]byte{'L','R'}for i := 0;i < n;i++ {// 定位该字符在黑板上的坐标v := target[i] - 97nx,ny := int(v / 5),int(v % 5)// 根据当前坐标和目的坐标进行移动。if nx == 5 {// 去z那个地方,必须先L,再Dmove(y,ny,sb,LeftRight)move(x,nx,sb,upDown) } else {move(x,nx,sb,upDown)move(y,ny,sb,LeftRight) }// 寻找到该字符,将其加入。sb.WriteByte('!')x,y = nx,ny}return sb.String()
}
// 不断抽象,复用代码。
// 最开始是xY(int,int,int,int,*strings.Builder)函数,以及yX(int,int,int,int,*strings.Builder)函数;
// 发现对x或y的动作是一致的,所以拆解成单个x的动作moveX | moveY,
// 继续抽象,moveX | moveY代码都差不多,只是加入的ch不一样,所以将ch当作变量传入,将两函数合并成move函数。
func move(z,nz int,sb *strings.Builder,choice [2]byte){zGap := z - nzch := choice[0]if zGap < 0 {ch = choice[1]}for i := 0;i < abs(zGap);i++ {sb.WriteByte(ch)}
}
func abs(x int) int {if x < 0 {return -x}return x
}

3、代码不断拆分复用的过程

// 不断抽象,复用代码。
// 最开始是xY(int,int,int,int,*strings.Builder)函数,以及yX(int,int,int,int,*strings.Builder)函数;
// 发现对x或y的动作是一致的,所以拆解成单个x的动作moveX | moveY,
// 继续抽象,moveX | moveY代码都差不多,只是加入的ch不一样,所以将ch当作变量传入,将两函数合并成move函数。
func move(z,nz int,sb *strings.Builder,choice [2]byte){zGap := z - nzch := choice[0]if zGap < 0 {ch = choice[1]}for i := 0;i < abs(zGap);i++ {sb.WriteByte(ch)}
}

总结

1)每个函数拆分,做到有清晰的宏观目的和宏观步骤,这样后来的人包括自己才能更容易的看懂。
2)拆分代码,也要提取公共代码,尽量减少重复无意义的代码,提高复用率。

参考文献

[1] LeetCode 字母板上的路径

相关文章:

字母板上的路径[提取公共代码,提高复用率]

提取公共代码前言一、字母版上的路径二、贪心1、idea2、go3、代码不断拆分复用的过程总结参考文献前言 写代码&#xff0c;在提高效率的同时&#xff0c;要方便人看&#xff0c;这个人包括自己。大函数要拆分成一些小函数&#xff0c;让每个函数的宏观目的和步骤都显得清晰&am…...

c# winform错误大全

c# winform 错误大全为了实现安装包安装完成后&#xff0c;启动程序。System.BadImageFormatException: 未能加载文件或程序集“file:///C:\xxxxxxxxx\xxxxxxx.exe”或它的某一个依赖项。生成此程序集的运行时比当前加载的运行时新&#xff0c;无法加载此程The version of the …...

AI_News周刊:第一期

2023.02.06—2023.02.12 关于ChatGPT的前言&#xff1a; 在去年年末&#xff0c;OpenAI的ChatGPT在技术圈已经火了一次&#xff0c;随着上周它的二次出圈&#xff0c;ChatGPT算得上是人工智能领域的一颗明星&#xff0c;它在聊天机器人领域有着不可忽视的影响力。其准确、快速…...

搭建mysql主从复制

前言&#xff1a; &#x1f44f; 作者简介&#xff1a;我是笑霸final&#xff0c;一名热爱技术的在校学生。 &#x1f4dd; 个人主页&#xff1a;个人主页1 || 笑霸final的主页2 &#x1f4d5; 系列专栏&#xff1a;数据库 &#x1f4e7; 如果文章知识点有错误的地方&#xff0…...

内存溢出、内存泄露的概述及常见情形

内存溢出&#xff08;OutofMemoryError&#xff09; 简述 java doc 中对 Out Of Memory Error 的解释是&#xff0c;没有空闲内存&#xff0c;并且垃圾收集器也无法提供更多内存。 JVM 提供的内存管理机制和自动垃圾回收极大的解放了用户对于内存的管理&#xff0c;由于 GC&…...

Linux 中断实验

目录 一、Linux 中断简介 上半部与下半部 二、添加设备树 三、编写驱动 1、定义宏 2、编写一个key结构体 3、imx6uirq设备添加成员 ​编辑4、按键中断处理函数 5、按键初始化 6、在驱动入口添加初始化 7、 驱动出口函数 代码如下 四、利用定时器进行消抖处理 1、添…...

【c++】指针

文章目录指针的定义和使用指针所占的内存空间空指针野指针const修饰指针指针和数组指针和函数指针、数组、函数案例&#xff1a;冒泡排序指针的定义和使用 指针定义的语法&#xff1a;数据类型 * 指针变量名 使用指针&#xff1a; 可以通过解引用的方式来找到指针指向的内存&…...

别具一格的婚礼,VR全景+婚礼的优势展现在哪里?

随着90后、95后逐渐步入结婚的主力军中&#xff0c;如何策划一场别具一格的婚礼是许多年轻人所头疼的&#xff0c;那么今年我们就可以玩点新潮的&#xff0c;VR婚礼或许是个不错的选择。 VR全景婚礼就是通过全景摄像机对婚礼进行记录&#xff0c;不但可以帮助新人捕捉婚礼的精彩…...

【GD32F427开发板试用】5. SPI驱动TFTLCD屏幕

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;hehung 之前发帖 【GD32F427开发板试用】1. 串口实现scanf输入控制LED 【GD32F427开发板试用】2. RT-Thread标准版移植 【GD32F427开发板试用…...

测试2年还拿实习生的薪资打发我,你后悔去吧····

20年7月大学毕业&#xff0c;学的计算机科学专业。因为考研之后&#xff0c;秋招结束了。没什么更多的岗位选择&#xff0c;就想找个工作先干着&#xff0c;然后亲戚在一家大厂公司上班说要招测试&#xff0c;所以就来做测试了。 虽然都是属于计算机大类&#xff0c;但自己专业…...

面向对象程序(C++)设计基础

一、类&对象C 在 C 语言的基础上增加了面向对象编程&#xff0c;C 支持面向对象程序设计。类是 C 的核心特性&#xff0c;通常被称为用户定义的类型。类提供了对象的蓝图&#xff0c;所以基本上&#xff0c;对象是根据类来创建的。声明类的对象&#xff0c;就像声明基本类型…...

conda安装nodejs版本过低解决方法

conda命令直接安装nodejs时&#xff0c;可能会由于镜像源中nodejs版本过低导致没法安装高本版的nodejs&#xff0c;导致无法jupyterlab使用一些扩展插件。 解决方法如下&#xff1a;&#xff08;windows环境下直接按提示下载版本安装就行&#xff0c;此处只介绍linux环境的解决…...

前端工程师leetcode算法面试必备-二分搜索算法(下)索算法(下)

一、287. 寻找重复数 给定一个包含 n 1 个整数的数组 nums&#xff0c;其数字都在 1 到 n 之间&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。假设只有一个重复的整数&#xff0c;找出这个重复的数。 1、HashMap 在没有其它附加条件的情况下&…...

使用Autowired为什么会被IDEA警告,应该怎么修改最佳

问题原因 关于这个问题&#xff0c;其实答案相对统一&#xff0c;实际上用大白话说起来也容易理解。 初始化问题 先看一下Java初始化类的顺序&#xff1a;父类的静态字段 > 父类静态代码块 > 子类静态字段 > 子类静态代码块 > 父类成员变量 > 父类构造代码块 &…...

面向对象(中)

面向对象&#xff08;中&#xff09; 一、 面向对象之继承性 继承性的好处 减少代码的冗余&#xff0c;提高了代码的复用性。 便于功能的扩展。 为多态性的使用&#xff0c;提供了前提。 继承性的格式 class A extends B{} A&#xff1a;子类、派生类、subclass B&#xff1a…...

【云原生】promehtheus整合grafana实现可视化监控实战

文章目录前言一. 实验环境二. 安装grafana2.1 grafana的介绍2.2 为什么选择grafana&#xff1f;2.3 grafana下载及安装三. 网页端配置grafana3.1 浏览器访问grafana网页3.2 使用grafana 获取prometheus的数据源3.3 grafana导入prometheus模板总结前言 大家好&#xff0c;又见面…...

Linux 内核定时器实验

目录 一、内核时间管理简介 二、内核定时器简介 三、驱动编写 1、修改makefile 2、添加定义 3、初始化led函数 4、添加调用 5、初始化定时器与定时器处理函数 这部分代码如下 四、ioctl函数 五、内核添加unlocked_ioctl 函数 1、添加设备操作集unlocked_ioctl成员 2…...

喜欢大屏电视?那就选择酷开系统,实现智能生活享受

随着科技的发展和我们生活水平的提高&#xff0c;越来越多的消费者开始认可并习惯使用各种高质量的科技产品&#xff0c;比如喜欢玩游戏的消费者&#xff0c;他们往往会追求流畅性更强、刷新率更快的大显示屏&#xff0c;以此获得更真实刺激的游戏体验&#xff0c;而喜欢追剧的…...

PMP应该如何备考?

备考之初的我们&#xff0c;总会四处搜索PMP备考经验&#xff0c;希望能拿到那些高分通关前辈的备考经验和方法。众所周知PMP考试因为有35个学时培训的基本要求&#xff0c;所以肯定是要通过培训机构报名的。 一&#xff0c;首先我们需要了解到新的考纲 1.PMP模块划分发生变化…...

AcWing《蓝桥杯集训·每日一题》—— 3956.截断数组

AcWing《蓝桥杯集训每日一题》—— 3956. 截断数组 文章目录AcWing《蓝桥杯集训每日一题》—— 3956. 截断数组一、题目二、解题思路三、代码实现本次博客我是通过Notion软件写的&#xff0c;转md文件可能不太美观&#xff0c;大家可以去我的博客中查看&#xff1a;北天的 BLOG…...

软件设计师下午题训练1-3题 练习真题训练10

一、2019下1、问题1E1:帮买顾问E2:车辆交易系统E3:物流商2、问题2D1:线索表D2:订单表D3:路线表D4:合约表D5:物流商表3、问题3数据流 起点 终点物流信息 P5 …...

ASML如何用“先买单后上菜”模式改写半导体设备研发规则

1. 从“被放鸽子”到“先买单后上菜”&#xff1a;ASML的450毫米晶圆博弈论在半导体这个以“摩尔定律”为信仰的行业里&#xff0c;每一次技术节点的跃进都伴随着天文数字的投入和巨大的商业风险。对于设备商而言&#xff0c;最怕的不是技术难题&#xff0c;而是倾尽所有研发出…...

AI安全控制框架:应对能力超越控制的风险与韧性防御策略

1. 项目概述&#xff1a;当能力超越控制“Project Glasswing”这个名字本身就充满了隐喻。玻璃翼&#xff0c;轻盈、透明、脆弱&#xff0c;却又能在阳光下折射出复杂的光谱。这像极了我们今天要讨论的核心议题&#xff1a;人工智能的能力边界正以前所未有的速度扩张&#xff0…...

贝叶斯深度学习不确定性估计:集成学习与MC-Dropout实战对比

1. 项目概述&#xff1a;为什么我们需要量化深度学习的不确定性&#xff1f;在自动驾驶汽车识别前方障碍物、医疗AI系统诊断病灶、或者机器人进行精细操作时&#xff0c;一个错误的预测可能导致灾难性的后果。传统的深度神经网络&#xff08;DNN&#xff09;在这些任务上表现出…...

从需求到开发的全流程

一、流程图二、各阶段拆解&#x1f50d;第一阶段&#xff1a;需求细化与设计&#xff08;会前关键&#xff09;此阶段的目标是产出一份清晰、可评审的PRD初稿。步骤核心动作与目的产出物与实战技巧1. 深度需求调研目的&#xff1a;消化方案&#xff0c;与原始需求方及关键用户深…...

游戏开发资源宝库:从计算机图形学到Unity生态的全栈知识索引

1. 项目概述&#xff1a;一份游戏开发者的“藏宝图”如果你是一名游戏开发者&#xff0c;无论是刚入行的新人&#xff0c;还是摸爬滚打多年的老兵&#xff0c;大概都经历过这样的时刻&#xff1a;为了实现一个特定的效果&#xff0c;或是解决一个棘手的技术难题&#xff0c;在搜…...

MicroClaw:跨平台智能体运行时,统一AI助手部署与管理

1. 项目概述&#xff1a;一个跨平台的智能体运行时如果你曾经尝试过在不同的聊天平台上部署AI助手&#xff0c;比如在Telegram上搞一个&#xff0c;又在Discord上搞一个&#xff0c;你大概率会感到头疼。每个平台都有自己的一套API、认证方式和消息格式&#xff0c;这意味着你几…...

STM32高效驱动WS2812:SPI+DMA时序精解与实战避坑

1. WS2812驱动原理与SPIDMA方案优势 第一次接触WS2812灯带时&#xff0c;我被它的单线控制方式惊艳到了——只需要一根信号线就能控制数百个RGB灯珠。但真正动手实现时才发现&#xff0c;这个看似简单的协议背后藏着不少玄机。WS2812采用归零码&#xff08;RZ&#xff09;编码方…...

LabVIEW数字IO编程避坑指南:单点采样、连续采样到底怎么选?NI-MAX测试面板帮你验证

LabVIEW数字IO编程实战&#xff1a;采样模式选择与NI-MAX验证全攻略 在工业自动化测试领域&#xff0c;LabVIEW的数字IO模块是最基础也最常用的功能之一。许多工程师在初次接触数字IO编程时&#xff0c;往往会被各种采样模式搞得晕头转向——单点采样、N采样、连续采样&#xf…...

R3nzSkin内存换肤技术实现与国服应用实践

R3nzSkin内存换肤技术实现与国服应用实践 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server R3nzSkin是一款专为中国服务器优化的英雄联盟内存换肤工具&am…...