java手机号码找靓号,选靓号
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
/**
* @Author: coderjjp
* @Date: 2020-05-08 10:18
* @Description: 选靓号
* @version: 1.0
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] s = br.readLine().split(" ");
int N = Integer.valueOf(s[0]);
int K = Integer.valueOf(s[1]);
char nums[] = br.readLine().toCharArray();//原始号码
int hash[] = new int[10];//存储每个数字有几个
for (int i = 0; i
hash[nums[i]-'0']++;
int cost = Integer.MAX_VALUE;//记录最小花费
HashMap changed_nums = new HashMap<>();
//K:存储修改至哪个数字,V:存储被修改的数字及数量,即用map记录最小花费的情况有哪些
for (int i = 0; i <=9 ; i++ ){
int diff = K - hash[i];
int cur_cost = 0;
int cur_changed_num[] = new int[10];
for (int d = 1; d <=9 && diff > 0 ; d++){
if (i + d <= 9){//优先将大的修改至i
int pd = hash[i+d];
if (pd >= diff){
cur_changed_num[i+d] = diff;
diff=0;
}else {
cur_changed_num[i+d] = pd;
diff -= pd;
}
cur_cost += cur_changed_num[i+d]*d;
}
if (i - d >= 0){//再将小的修改至i
int pd = hash[i-d];
if (pd >= diff){
cur_changed_num[i-d] = diff;
diff=0;
}else {
cur_changed_num[i-d] = pd;
diff -= pd;
}
cur_cost += cur_changed_num[i-d]*d;
}
}
if (cur_cost
changed_nums.clear();//将之前的情况清空
changed_nums.put(i, cur_changed_num);//将当前情况记录下来
cost = cur_cost;
}
if (cur_cost == cost)//如果当前花费与之前的最小花费相同
changed_nums.put(i, cur_changed_num);
//如果当前花费比之前的最小花费少,直接跳过即可
}
System.out.println(cost);
String ans = Character.toString((char)('9'+1));
for (int c: changed_nums.keySet()) {
String cur_ans = getGMN(nums, N, c, changed_nums.get(c));
if (cur_ans.compareTo(ans)
ans = cur_ans;
}
System.out.println(ans);
}
private static String getGMN(char[] nums, int N, int c, int[] changed_num){
StringBuilder sb = new StringBuilder();
for (char cs : nums)
sb.append(cs);
for (int i = 0; i
if (nums[i]-'0' > c && changed_num[nums[i]-'0'] > 0){//比i大的从前往后修改
changed_num[nums[i]-'0']--;
sb.setCharAt(i, (char)('0'+c));
}
}
for (int i = N-1; i >= 0; i--){//比i小的从后往前修改
if (nums[i]-'0' 0){
changed_num[nums[i]-'0']--;
sb.setCharAt(i, (char)('0'+c));
}
}
return sb.toString();
}
}
java手机号码找靓号,选靓号相关推荐
- 拼多多笔试题(六):选靓号
问题描述: A 国的手机号码由且仅由 N 位十进制数字(0-9)组成.一个手机号码中有至少 K 位数字相同则被定义为靓号.A 国的手机号可以有前导零,比如 000123456 是一个合法的手机号. 小 ...
- 靓号站php,阿里宝卡选靓号php代码
/** * @Author: Ding Jianlong * @Date: 2018-10-29 16:00:24 * @Last Modified by: Ding Jianlong * @Last ...
- 帮忙选个号手机号码末四位:4739、3636,2577,8968,1717,2424,8886,5678,4619,5151,6226,1212,4321,2157,3445,觉得哪个好?
帮忙选个号手机号码末四位:4739.3636,2577,8968,1717,2424,8886,5678, 4619,5151,6226,1212,4321,2157,3445,觉得哪个好? 刚才帮忙 ...
- Java手机号码正则表达式验证,手机号段根据2020年最新号段所做参考
最近需要实现java手机号码正则表达式验证,然而百度了一下发现结果挺多的,但是好像号段不全,基本上都是几年前的结果,大部分刚好就没我166的号段,我今天也查了一下最新的手机号段,重新写一遍(根据需求我 ...
- JAVA模拟福利彩票双色球(选号,判断是否中奖,以及中奖号码)
一,双色球中奖规则(均不分顺序): 一等奖:6个红球+1个蓝球号码完全相同-奖金波动9000000元左右 二等奖:6个红球+0个蓝球号码相同-奖金波动150000元左右 三等奖:5个红球+1个蓝球号码 ...
- 关于手机号码四重号,四连号的校验
友友们,圣诞节快乐,有没有给女朋友准备礼物那!!!作为单身狗的我也假装和哥哥去吃了饭,希望明年不是他,哈哈. 言归正传,在最近的一个需求中遇到一个关于手机号码的校验问题,的确难为了作为小白的我,现在整 ...
- java的环境变量classpath中加点号 ‘.’ 的作用
java的环境变量classpath中加点号 '.' 的作用 "."表示当前目录,就是编译或者执行程序时,你的.class文件所在的目录: 当找.class文件时,先去" ...
- Java实现对手机号、身份证号、护照号脱敏
目录 1.Java原生代码实现: 2.使用 Hutool 工具实现: 背景: 我们在项目中经常会需要用到用户的敏感信息,比如手机号.身份证号.护照号: 当数据需要在页面上进行展示的时候就需要进行脱敏, ...
- linux主设备编号从0到多少,Linux驱动开发之主设备号找驱动,次设备号找设备
一.引言 很久前接触linux驱动就知道主设备号找驱动,次设备号找设备.这句到底怎么理解呢,如何在驱动中实现呢,在介绍该实现之前先看下内核中主次设备号的管理: 二.Linux内核主次设备号的管理 Li ...
最新文章
- 某程序员吐槽:组里新来一位美女同事,男同事们冲上去大献殷勤,过几天又一哄而散!...
- 2.03-handler_openner
- Asp.Net Core 混合全球化与本地化支持
- 【渝粤教育】国家开放大学2018年春季 8634-21TAndroid智能手机编程 参考试题
- mysql8.0设置用户权限_mysql8.0建立用户授予权限报错解决方法
- centos7安装oracle12c 二
- LOJ#6002. 「网络流 24 题」最小路径覆盖
- [置顶]LGame框架问题汇总,有疑问请发至此文
- 从零开始--系统深入学习android(实践-让我们开始写代码-Android框架学习-3. 菜单)...
- 使用valgrind检查内存越界
- Tensorflow函数学习笔记2---tf.multipy和tf.matmul
- javascript 基础案例(循环)
- 用计算机编纂家谱的作用,家谱软件的比较
- LaTex图表中英文标题,中英文图表目录2
- 12代酷睿笔记本有哪些不错?游匣G16体验大升级
- 小尺寸android 手机推荐,喜欢小屏安卓手机的来看看,这三款便宜又好用
- scipy.misc.imresize改为Image.resize方法
- C语言 1982年我国第三次人口普查,全国人口为10.3亿,假如人口增长率为5%。编写一个程序,求在公元多少年总人口翻了一番。
- 雷达导引头伺服系统的建模与仿真
- 数据结构——通俗讲解关于任一二叉树n0=n2+1的证明
热门文章
- 网络-FTP协议与TFTP协议
- SSH和SSM的区别(springmvc简介)
- JavaScript-ES6新特性使用教程
- 人类禁止进入的“微博”,我的AI机器人在那里吹牛,“勾搭”AI小姑娘
- OpenHarmony-Hi3518EV300挂载烧写
- Python基础入门之二进制的负数
- 华为EMUI10升级名单曝光,共33款机型,看看你的华为手机在内吗
- AttributeError: module ‘tensorflow._api.v2.train‘ has no attribute ‘NewCheckpointReader‘解决方案
- 信息安全技术网络安全等级保护基本要求GB/T 22239一2019(第一级安全要求)
- CheckPoint Security Checkup 中文支持