【LeetCode每日一题:1663. 具有给定数值的最小字符串~~~递归+DFS+贪心】

news2024/10/5 14:44:07

题目描述

小写字符 的 数值 是它在字母表中的位置(从 1 开始),因此 a 的数值为 1 ,b 的数值为 2 ,c 的数值为 3 ,以此类推。

字符串由若干小写字符组成,字符串的数值 为各字符的数值之和。例如,字符串 “abe” 的数值等于 1 + 2 + 5 = 8 。

给你两个整数 n 和 k 。返回 长度 等于 n 且 数值 等于 k 的 字典序最小 的字符串。

注意,如果字符串 x 在字典排序中位于 y 之前,就认为 x 字典序比 y 小,有以下两种情况:

x 是 y 的一个前缀;
如果 i 是 x[i] != y[i] 的第一个位置,且 x[i] 在字母表中的位置比 y[i] 靠前。

示例 1:

输入:n = 3, k = 27
输出:“aay”
解释:字符串的数值为 1 + 1 + 25 = 27,它是数值满足要求且长度等于 3 字典序最小的字符串。
示例 2:

输入:n = 5, k = 73
输出:“aaszz”

提示:

1 <= n <= 105
n <= k <= 26 * n

求解思路&&实现代码

思路1:DFS

class Solution {
	// 每一个位置可以重复选择,满足给定参数的结果

    List<String> str=new ArrayList<>();

    public String getSmallestString(int n, int k) {
        int[] nums=new int[26];
        for(int i=1;i<=26;i++){
            nums[i-1]=i;
        }
        List<Integer> list=new ArrayList<>();
        dfs(0,nums,list,0,n,0,k);
        Collections.sort(str);
        return str.size()>0?str.get(0):"";
    }
    public void dfs(int index,int[] nums,List<Integer> list,int cnt,int n,int sum,int k){
        //结束条件判断
        if(sum>k||cnt>n) return;
        if(str.size()==1||sum + (n-cnt) * 26 < k) return;
        if(sum==k&&cnt==n){
            StringBuilder sb=new StringBuilder("");
            for(int j=0;j<list.size();j++){
                sb.append((char)(96+list.get(j))+"");
            }
            str.add(sb.toString());
            return;
        }
        for(int i=index;i<nums.length;i++){
            list.add(nums[i]);
            // 某一个位置可以多次选择,dfs的时候参数还是i位置
            dfs(i,nums,list,cnt+1,n,sum+nums[i],k);
            list.remove(list.size()-1);
        }
    }
}


思路2:

class Solution {
    public String getSmallestString(int n, int k) {
        StringBuilder ans = new StringBuilder();
        for (int i = 1; i <= n; i++) {
            int lower = Math.max(1, k - (n - i) * 26);
            k -= lower;
            ans.append((char) ('a' + lower - 1));
        }
        return ans.toString();
    }
}

运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180053.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你会仲裁吗——劳动仲裁需要准备

目录 劳动仲裁申请书 仲裁思路 ​编辑 一、仲裁前准备 1、自己不认可年终奖 2、自己不认可绩效 二、【仲裁前】协商阶段 1、主张3个月足额年终奖 2、公司协商离职赔偿方案 年终奖仲裁证据 延时加班费 周末加班费 节假日加班费 其他福利-如房补 申请劳动仲裁交通…

uniapp组件传参方式梳理

前言 日常开发中经常会遇到组件之间传递参数问题,整理了几种常见的传参方式,方便日后复习梳理. 常见组件传参的三种方式: 1.父组件向子组件传参 2.子组件向父组件传参 3.子组件向非父组件传参 1.父组件向子组件传参自定义组件: <template><view c…

XPath入门

好久没用XPath了&#xff08;之前没做笔记&#xff09;&#xff0c;最近要用的时候又到处查。。。&#xff08;痛苦.jpg&#xff09;&#xff0c;还是记录下吧&#xff08;π_π&#xff09; XPath&#xff0c;是XML Path Language的缩写&#xff0c; 是一门在 XML 文档中查找…

【Linux】POSIX信号量

目录&#x1f308;前言&#x1f338;1、POSIX信号量&#x1f368;1.1、概念&#x1f367;1.2、PV操作&#x1f33a;2、POSIX信号量相关API&#x1f368;2.1、初始化和销毁信号量&#x1f367;2.2、等待信号量&#xff08;P&#xff09;&#x1f370;2.3、发布信号量&#xff08…

ImmutableList hessian2序列化失败问题分析

问题描述 A服务提供了个RPC接口给B服务使用&#xff0c;入参里有个参数是List类型&#xff0c;B服务在传参时使用Guava里的 ImmutableList&#xff0c;结果发生报错。 其中&#xff0c;B服务即consumer端的异常为&#xff1a;「com.alibaba.dubbo.remoting.RemotingException:…

AD采集之离散化概念(Quantizer模型使用介绍)

模拟量采集的PLC程序和功能块算法,可以参看下面的文章链接: PLC模拟量采集算法数学基础(线性传感器)_RXXW_Dor的博客-CSDN博客_模拟量采集线性校准模拟量采集库如何设计,具体算法代码请参看我的另一篇博文:PLC模拟量输入 模拟量转换FC:S_ITR_RXXW_BOSS的博客-CSDN博客_…

缓存数据库memcached

目录 一.memcached简介 memcached简介 memcached的特点 二.memcached安装 2.1.yum安装 2.2.源码安装 三.memcached命令 3.1.memcached的特征 3.2.memcached的set命令 3.3.memcached的get命令 四.memcached应用实例配置 4.1.图示 4.2.基础配置 4.3.环境规划 4.3.1…

SpringBoot程序的打包和运行

程序打包 SpringBoot程序是基于Maven创建的&#xff0c;在Maven中提供有打包的指令&#xff0c;叫做package。本操作可以在Idea环境下执行。 mvn package​ 打包后会产生一个与工程名类似的jar文件&#xff0c;其名称是由模块名版本号.jar组成的。 程序运行 ​ 程序包打好以…

TeeGrid for .NET 2023

TeeGrid for .NET 2023 TeeGrid for.NET为Visual Studio项目提供了一个非常快速的数据网格。打包功能的.NET数据网格提供了诸如排序、分组或过滤网格数据、可调整列大小、主详细视图、可拖动选择、网格滚动等功能。只需使用几个属性设置即可启用这些内置功能。TeeGrid可以链接到…

【一文看懂 Redis 核心】 基础数据结构 架构设计 存储 集群

基础数据结构 & 架构设计 & 存储 & 集群 redis 简单来说其实就是一个基于内存的 key - value 数据库&#xff0c;它本身结构的前提就是 key - value 类似于 Java 中的 HashMap &#xff0c;所以我们在聊 redis 的时候始终要记得这个前提&#xff0c;同时 redis 在…

【SpringCloud】Feign 和 OpenFeign 两者的异同点

Feign 和 OpenFeign 两者共同点Feign和OpenFeign作用一样&#xff0c;都是进行远程调用的组件。里面都内置了 Ribbon。都是加在消费端的注解&#xff0c;让消费端可以调用其他生产者的服务。Feign 和 OpenFeign 两者区别&#xff08;1&#xff09;依赖不同Feign 的依赖<!-- …

十九、Gtk4-Ui file for menu and action entries

Ui file for menu 你可能认为构建菜单真的很麻烦。是的&#xff0c;程序很复杂&#xff0c;需要很多时间来编码。这种情况类似于构建小构建。当我们构建部件时&#xff0c;使用ui文件是避免这种复杂性的好方法。菜单也是如此。 菜单的ui文件有界面和菜单标签。文件以interfac…

JavaScript 基本认识

JavaScript 简介 JavaScript 是什么&#xff1f; JavaScript 是互联网最流行的脚本语言&#xff0c;这门语言可用于 HTML 和 Web&#xff0c;更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。 JavaScript 是脚本语言&#xff1f; HTML 是超文本标记语言&am…

Groovy实现热部署

Groovy实现热部署一、概述二、准备工作2.1 规则接口IRule三、非Spring环境Groovy文件方式3.1 Groovy文件3.2 读取并生成实例3.3 使用这个实现四、数据库Groovy脚本方式4.1 Groovy脚本4.2 读取并生成实例五、Spring中使用Groovy的方式5.1 Groovy文件5.2 读取并生成实例5.3 使用这…

css sprite雪碧图制作,使用以及相关,图文gif

写在前面&#xff1a; 在网页制作中&#xff0c;雪碧图也是前端攻城狮必须掌握的一项小技能。百度词条对雪碧图的解释是&#xff1a;CSS雪碧 即CSS Sprite&#xff0c;也有人叫它CSS精灵&#xff0c;是一种CSS图像合并技术&#xff0c;该方法是将小图标和背景图像合并到一张图…

计算机组成原理 | 第一章:概论 | 冯诺依曼计算机 | 计算机硬件

文章目录&#x1f4da;冯诺依曼计算机的特点&#x1f4da;计算机硬件组成框图&#x1f4da;计算机硬件的主要技术指标&#x1f407;非时间指标&#x1f407;时间指标&#x1f511;计算技巧归纳&#x1f4da;小结&#x1f511;本章掌握要点&#x1f407;补充思考题&#x1f4da;…

[电商实时数仓] 用户行为数据和业务数据采集以及ODS层

文章目录1.数据仓库环境准备1.1 导入依赖1.2 创建相关包2.数据仓库运行环境2.1 Hbase环境2.2 模拟数据3.数仓开发之ODS层3.1 mysql配置修改3.2 FlinkCDC的程序3.3 结果检测1.数据仓库环境准备 1.1 导入依赖 <properties><java.version>1.8</java.version>&l…

为什么你的Facebook广告策略应该包括SEO

最近在看了很多关于 SEO的文章&#xff0c;今天想跟大家分享一些我个人关于 Facebook广告中的 SEO策略&#xff0c;以及它为什么是必要的。虽然在我看来&#xff0c;所有营销手段都需要结合 SEO才能发挥最大作用&#xff0c;但这并不意味着要完全放弃 SEO。如果你对以下问题感兴…

分享147个ASP源码,总有一款适合您

ASP源码 分享147个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 147个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1us1KTsxeaZlosHsqvrkC5Q?pwd81pl 提取码&#x…

Leetcode:51. N 皇后(C++)

目录 问题描述&#xff1a; 实现代码与解析&#xff1a; 回溯&#xff1a; 原理思路&#xff1a; 问题描述&#xff1a; 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&a…