首页 > 其他分享 >力扣每一一题2023.1.26---1663. 具有给定数值的最小字符串

力扣每一一题2023.1.26---1663. 具有给定数值的最小字符串

时间:2023-01-26 23:22:47浏览次数:39  
标签:力扣 26 int res 数值 --- 字符串 n1

小写字符 的 数值 是它在字母表中的位置(从 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
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/smallest-string-with-a-given-numeric-value
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

最近刷题,虽然都不是啥太难的,但还从没今天这样狼狈过。一开始的思路正确,但在敲代码过程中总是出错,前前后后改了五六遍,emmm,总觉得自己是sb。好歹最后是用自己的思路写出来了,虽然太过拖沓,代码不够优雅,但毕竟还是自己的思路写的,没有参考答案(๑>ڡ<)☆

思路是贪心法,即尽可能多的给答案前面添加'a',给答案后面添加'z'。

剩余的添加在中间。

代码如下:

class Solution {
    public String getSmallestString(int n, int k) {
        StringBuilder res = new StringBuilder(n);
        int n1 = k / 26;
        int n2 = k % 26;
//        全是z的情况
        if (n2 == 0 && n1 == n) {
            res.append("z".repeat(Math.max(0, n)));
            return res.toString();
        }
//        补齐
        while (n2 < n - n1) {
            n1 --;
            n2 += 26;
        }
        int tem = n2 - n + n1;
        res.append("a".repeat(Math.max(0, n - n1 - 1)));
        res.append((char)(tem + 'a'));
        res.append("z".repeat(Math.max(0, n1)));
        return res.toString();
    }
}

运行结果:

运行结果

 

放一个官解吧,那个代码挺简洁优雅的。

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();
    }
}

 官解

 

再放一个网友优化速率的:

 

标签:力扣,26,int,res,数值,---,字符串,n1
From: https://www.cnblogs.com/allWu/p/17068385.html

相关文章

  • 2019-2020各省省选选解
    没写题解不意味着没做,有的忘了写或者太草率了就算了。部分前言删了。2020联合省选希望题解链接。ZJOI抽卡题解有趣的题目。后面的部分不翻某混凝土数学真做不来......
  • Day16 -闭包和装饰器
    1.闭包介绍和基本语法1.函数产生嵌套(外函数中定义一个内函数)2.内函数使用外函数定的局部变量3.外函数返回内函数的引用(函数名)闭包的介绍我们前面已经学过了......
  • 力扣 871. 最低加油次数 [堆]
    871.最低加油次数汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。沿途有加油站,每个 station[i] 代表一个加油站,它位于出发位置东面 stati......
  • 【TPAMI2023】Global Learnable Attention for Single Image Super-Resolution
    【TPAMI2023】GlobalLearnableAttentionforSingleImageSuper-Resolution代码:https://github.com/laoyangui/DLSN这是来自福州大学的工作,提出一个有意思的观点:当前......
  • C语言--简单的爱心代码
    新手都能敲出来的爱心代码#include<stdio.h>#include<stdlib.h>//#include<string.h>intmain(){floatx,y,a;for(y=1.5;y>-1.5;y-=0.1){for(x=-1......
  • 1.26 导读部分
    c++提供了4种不同的编程模型procedural-based,object-based,object-oriented,generics explicit可以阻止类被隐式转换,但仍可以进行显式转换,(一般没有特殊情况,都要......
  • 竞赛图初探 || CF1779E Anya's Simultaneous Exhibition - 竞赛图 - 交互 -
    题目链接:https://codeforces.com/contest/1779/problem/E题解:将一个完全图的每条边定向,构成的有向图叫做竞赛图也很好理解,\(n\)个人两两比赛,肯定有胜有负,赢家向负者连......
  • 上交自瞄算法开源代码-装甲板识别功能分析
    前言开源代码github网址:GitHub-xinyang-go/SJTU-RM-CV-2019:上海交通大学RoboMaster2019赛季视觉代码这里着重分析主函数main.cpp与装甲板识别部分的工程文件armer......
  • Atcoder ABC244E - King Bombee 题解
    原题:AtcoderABC244E-KingBombee题意给你一张图,从\(S\)到\(T\),经过\(k\)条边,经过\(X\)号点偶数次的方案数。做法设\(f_{i,j,k}\)表示经过\(i\)条边,......
  • Java基于ssm师生实验课-实验室-实验设备预约系统源码
    简介java+ssm开发的实验课实验设备实验室预约系统,老师可预约实验设备和实验室,然后发布实验课和上传实验附件。学生可以报名实验课,也可以自己预约实验室(部分实验室对学生......