【发布时间】:2018-03-14 17:45:59
【问题描述】:
给定两个数字 n 和 k,找到一个由小写字母组成的字符串 s,使得字符串中所有元素的值之和等于 k。 如果存在很多这样的字符串,则找出按字典顺序最小的那个。
第i个小写字母的值为i,例如a的值为1,b的值为2,以此类推。
输入格式: 输入的第一行包含一个整数 t,表示测试用例的数量。 后面有 t 行,每行包含两个以空格分隔的整数 n 和 k。
输出格式: 打印长度为 n 且字符串总和值等于 k 的字典序最小字符串。
约束:
1
1
n
示例输入:
2
5 42
3 25
样本输出:
aaamz
哇
解释:
aaamz 的字符串值也是 42,它是最小的字典字符串,它包含 5 个字符,字符串值是 42。
【问题讨论】:
-
这似乎是一个家庭作业问题,请求家庭作业帮助的问题必须包括迄今为止为解决该问题所做的工作摘要,以及您在解决该问题时遇到的困难的描述。
-
@irs102info 是否可能存在任何无效结果,例如像这样的情况 - 1 40 其中 n=1 和 k=40,这样的情况会存在吗?
-
你有问题描述的链接吗,好像是网上发布的?
-
@zenwraight,是的,我们可以得到无效的结果,在这种情况下我们必须打印'-1'。我没有那个问题的链接。
-
@LakshayGarg,这是我解决问题的方法,
char[] a = new char[n]; for(int i=0;i<n;i++){ a[i] = 'a'; } int a_count = n; int tot_count = k; int x = tot_count - a_count; for(int i=n-1;i>=0; i--){ if(x> 26){ a[i] = 'z'; x = (x-26)+1; } else if(x > 0){ a[i] = (char) (a[i] + x); x = 0; } if(x == 0) break; } String op=""; for(int i=0;i<n;i++){ op = op+a[i]; } System.out.println(op);但我收到了 Time Limit Exceeds (TLE) 错误。有没有其他想法或方法可以更快地解决?
标签: arrays string algorithm data-structures