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

【算法】【算法杂谈】一种字符串和数字的对应关系

目录

  • 前言
  • 问题介绍
  • 解决方案
  • 代码编写
    • java语言版本
    • c语言版本
    • c++语言版本
  • 思考感悟
  • 写在最后

前言

当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~

在此感谢左大神让我对算法有了新的感悟认识!

问题介绍

原问题
给定字符串chars = [A,B…,Z],定义一个字符串和数字之间的关系
A, B, C, D…Z, AA, AB,…,AZ,BA, BB,BC,…BZ,AAA…ZZZ
1, 2, 3, 4, … 26, 27, 28, …52
问题一:给定一个字符串str,求出该字符串代表的数字
问题二:给定一个数字,求出该数字代表的字符串

解决方案

原问题
首先该问题通过k进制数是无法解决的,但是可以收到一些启发,使用伪进制数来解决问题
比如给定的字符集合chars = [A,B,C,D],那么该字符集合能够做出进制为4的伪进制数,相当于"逢E进一"
因此当给定一个str = BCBD时,求对应的数值,可以从高位开始计算进制转换即可
当给定一个数值时,分以下步骤计算:
1、计算数值需要多少位来存储,通过(数值/k^n)来找到n最大能够取到多少?
2、求出位数,后面循环填充每一位的数值即可,从高位开始计算,具体看代码

代码编写

java语言版本

原问题:
方法一:

    /*** 二轮测试:给定num,获取String的值* @param num* @return*/public static String num2StringCp1(int num, char[] chars) {if (num < 0 || chars == null || chars.length == 0) {return null;}int len = chars.length;// 先判断需要多少位存储int n = 0;while((int)(num / Math.pow(len, n))!= 0) {n++;}char[] res = new char[n];// 将所有位全部置为Afor (int i = 0; i < res.length; i++) {res[i] = 'A';num -= Math.pow(len, i);}// 此时num剩下的需要进行进制转换,从最高位开始判断for (int i = 0; i < res.length; i++) {int r = (int) (num/Math.pow(len, res.length-1 - i));res[i] += r;num -= r * Math.pow(len, res.length-1 - i);}return String.valueOf(res);}/*** 二轮测试:通过字符串获取num数字* @param str* @param chars* @return*/public static int string2Num(String str, char[] chars) {if (str == null || chars == null|| str.length() == 0 || chars.length == 0) {return 0;}int len = chars.length;char[] chars1 = str.toCharArray();int res = 0;for (int i = 0; i < chars1.length; i++) {int cur = chars1[i] - 'A' + 1;res += cur * Math.pow(len, chars1.length - 1 - i);}return res;}public static void main(String[] args) {System.out.println(string2Num("BABC", new char[]{'A', 'B', 'C'}));}

进阶问题

/*** 进阶问题:如果数组中存在一个1,如何能够最快的求得答案* @param arr* @return*/public static int unformSumCp3(int[] arr){if (arr == null || arr.length == 0) {return 0;}Arrays.sort(arr);int range = 0;for (int i = 0; i < arr.length; i++) {if (arr[i] > range+1) {return range+1;}else {range += arr[i];}}return range+1;}

c语言版本

正在学习中

c++语言版本

正在学习中

思考感悟

1、首先说一下字符串转数字的过程,这个过程其实很简单,确实跟进制转换是一致的只是没有0而已,A代表1,B代表2,计算出来结果没有问题
2、在说一下数字转字符串的问题,这个按照k^n最大不超过当前num的值的方式进行计算即可,整体来讲没有难度,就是需要对转换的原理熟悉一下

写在最后

方案和代码仅提供学习和思考使用,切勿随意滥用!如有错误和不合理的地方,务必批评指正~
如果需要git源码可邮件给2260755767@qq.com
再次感谢左大神对我算法的指点迷津!

相关文章:

【算法】【算法杂谈】一种字符串和数字的对应关系

目录 前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本 思考感悟写在最后 前言 当前所有算法都使用测试用例运行过&#xff0c;但是不保证100%的测试用例&#xff0c;如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识&#xff01; 问题介…...

Java并发基础理论

Java并发基础理论 进程与线程 进程 ​ 进程是程序的一次执行过程&#xff0c;是系统运行程序的基本单位&#xff0c;因为进程是动态的。系统运行一个程序就是一个进程从创建运行到消亡的过程。 ​ 我们启动main方法其实就是启动了一个JVM进程&#xff0c;而main方法所在的线…...

ubuntu22.04静态ip设置(桥接模式、only-host+NAT模式)

在创建一台虚拟机后&#xff0c;默认的方式往往是通过DHCP动态的进行分配&#xff0c;DHCP服务器会告知创建的虚拟机分配到的ip地址&#xff0c;网关地址等信息。所以在创建好虚拟机之后&#xff0c;这些信息都不需要我们来配置&#xff0c;我们直接用就好了。 但是&#xff0…...

深度模型中的正则化、梯度裁剪、偏置初始化操作

最近调试代码&#xff0c;发现怎么调试都不行&#xff0c;就想着用一些优化方式&#xff0c;然后又不是很清楚这些优化方式的具体细节&#xff0c;然后就学习了一下&#xff0c;这里记录下来&#xff0c;方便以后查阅。 深度模型中的正则化、梯度裁剪、偏置初始化操作 正则化常…...

设计模式之装饰模式

定义 装饰模式指的是在不必改变原类文件和使用继承的情况下&#xff0c;动态地扩展一个对象的功能。它是通过创建一个包装对象&#xff0c;也就是装饰来包裹真实的对象。 模式特点 &#xff08;1&#xff09; 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对…...

华为OD机试真题 Java 实现【最佳对手】【2023Q1 200分】

一、题目描述 游戏里面,队伍通过匹配实力相近的对手进行对战。但是如果匹配的队伍实力相差太大,对于双方游戏体验都不会太好。 给定 n 个队伍的实力值,对其进行两两实力匹配,两支队伍实例差距在允许的最大差距 d内,则可以匹配。 要求在匹配队伍最多的情况下匹配出的各组…...

IOS证书制作教程

IOS证书制作教程 点击苹果证书 按钮 点击新增 输入证书密码&#xff0c;名称 这个密码不是账号密码&#xff0c;而是一个保护证书的密码&#xff0c;是p12文件的密码&#xff0c;此密码设置后没有其他地方可以找到&#xff0c;忘记了只能删除证书重新制作&#xff0c;所以请务…...

【人工智能】蚁群算法(密恐勿入)

蚁群算法&#xff08;密恐勿入&#xff09; 蚁群算法--给你一个感性认识 蚁群算法&#xff08;密恐勿入&#xff09;1. 算法简介1.1 基本原理1.1.1 模拟蚂蚁在简单地形&#xff0c;寻找食物1.1.2 模拟蚂蚁在复杂地形&#xff0c;找到食物1.2 算法应用 2. 算法解析3.算法应用——…...

VONR排查指导分享

不能注册或呼叫到SIP服务器端30秒挂断呼叫的黄金法则咬线或摘机状态单通或无语音收到400 bad request收到413&#xff0c;513 Request Entity Too Large或Message Too Large消息收到408&#xff0c; 480或者487 消息483 - Too Many Hops488 – Not Acceptable Here语音质量和思…...

Daftart.ai:人工智能专辑封面生成器

前言 Daft Art AI是一款使用人工智能技术来帮助您制作专辑封面的软件&#xff0c;它可以让您在几分钟内&#xff0c;用简单的编辑器和精选的美学风格&#xff0c;为您的专辑或歌曲创建出惊艳的高质量的艺术品。Daft Art AI有以下几个特点&#xff1a;简单易用&#xff1a;您只…...

ZigBee案例笔记 - 定时器

文章目录 1.片内外设I/O2.定时器简介3.定时器1寄存器4.定时器1操作自由运行模式模模式正计数/倒计数模式 5.16位计数器定时器1控制LED 示例 6.定时器3概述自由运行模式倒计数模式模模式正/倒计数模式 7.定时器3寄存器定时器3控制LED闪烁 1.片内外设I/O 定时器这样的片内外设也…...

GE H201TI 全系统自检和自诊断

Hydran 201Ti是一个小型在线预警发射器。它永久安装在变压器上&#xff0c;将为工作人员提供各种故障气体复合值的单一ppm读数&#xff0c;以提醒他们潜在的问题。 可以下载该值&#xff0c;并且可以将警报设置在预定水平&#xff0c;以提醒人员并能够监控发展中的故障状况。 …...

这个屏幕录制太好用了!

哈喽&#xff0c;大家好&#xff01;今天给各位小伙伴测试了一屏幕录制的小工具——ApowerREC。它是一款专业同步录制屏幕画面及声音的录屏软件。界面简洁&#xff0c;操作简单&#xff0c;支持实时编辑屏幕录像、创建计划任务、录制摄像头高清视频等功能。废话不多说&#xff…...

初识redis【redis的安装使用与卸载】

一.redis的概念 Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务&#xff0c;是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。在redis官网中对redis的描述是这样的&#…...

接口测试总结及其用例设计方法整理,希望可以帮到你

目录 接口测试的总结文档 第一部分&#xff1a; 第二部分&#xff1a; 接口测试用例设计 接口测试的总结文档 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系。但该部分只交代了怎么做…...

基于FPGA的多功能数字钟的设计

摘要 数字钟是采用数字电路实现对时、分、秒数字显示的计时装置,是人们日常 生活中不可少的必需品。本文介绍了应用FPGA芯片设计多功能数字钟的•种方 案,并讨讨论了有关使用FPGA芯片和VHDL语言实现数字钟设计的技术问题。 关键词数字钟、分频器、译码器、计数器、校时电路、…...

第四十二天学习记录:C语言进阶:笔试题整理Ⅲ

问&#xff1a;解释一下int(*a[20])(int)是什么&#xff1f; ChatAI答&#xff1a; int (*a[20])(int) 是一个数组&#xff0c;该数组中每个元素都是一个指向函数的指针&#xff0c;该函数具有一个int类型的参数&#xff0c;并返回一个int类型的值。 具体来说&#xff0c;a是一…...

GLSL 代码规范

文件 文件顶点,片段,几何和计算着色器文件应该分别有 _vert, _frag, geom 和 _comp 后缀(例如: eevee_film_fragg.glsl)。Shader文件名必须是唯一的,并且必须以它们所属的模块作为前缀(例如: workbench_material_lib.glsl eevee_film_lib.glsl)。一个 shader 文件必须包含且…...

红黑树封装map和set

文章目录 红黑树封装map和set1. 改良红黑树1.1 改良后的节点1.2 改良后的类分别添加仿函数代码 3. 封装map和set3.1 set3.2 map 3. 迭代器3.1 begin 和 end3.2 operator()和operator--()3.3 const迭代器set的迭代器map的迭代器 4. map的operator[]的重载5. 完整代码实现5.1 RBT…...

python序列

在Python中&#xff0c;序列类型包括字符串、列表、元组、集合和字典&#xff0c;这些序列支持以下几种通用的操作&#xff0c;但比较特殊的是&#xff0c;集合和字典不支持索引、切片、相加和相乘操作。 字符串也是一种常见的序列&#xff0c;它也可以直接通过索引访问字符串内…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...