首页 > 其他分享 >4_14

4_14

时间:2023-04-14 22:01:04浏览次数:46  
标签:arr return 14 int num 苹果 盘子

题目:如果整数x 满足:对于每个数位d*,这个数位恰好 在 x中出现d次。那么整数 x 就是一个 数值平衡数 。
给你一个整数 n,请你返回 严格大于n的 最小数值平衡数 。

思路:求出x中每个数位出现的次数,与数位本身比较

public class Solution4_11 {
    public static boolean f(int n) {
        //用一个数组记录n的每个数位出现的次数,数位=索引
        var arr = new int[10];
        var num = n;
        //用循环把num给拆开,对应的arr的索引加一,记录对应的数位有多少个
        while (num != 0) {
            var t = num % 10;
            ++arr[t];
            num /= 10;
        }
        //如果n的每个数位不等于它对应的索引的值,返回false,反之fan回true
        for (int i = 0; i < 10; i++) if (arr[i] != 0 & arr[i] != i) return false;
        return true;
    }

    public static int nextBeautifulNumber(int n) {
        var num = n + 1;
        while (true) {
            if (f(num)) return num;
            num++;
        }
    }
}

题目:给你一个仅由数字(0 - 9)组成的字符串* num
请你找出能够使用
num 中数字形成的 最大回文 整数,并以字符串形式返回。该整数不含前导零 。

思路:找到num中数量超过1的字符,越大放在越前面,和后面,比如,998877,变成987789
放完之后,找到还剩下的最大的单个字符,放在最中间,0不能放在最前面

public class Solution4_13 {
    public String largestPalindromic(String num) {
        int[] arr = new int[10];//arr用来存num中与arr的索引对应的字符的数量
        //用一个循环把num里的字符拆开放到arr里,比如998877,arr[9]=2,arr[8]=2,arr[7]=2
        for (int i1 = 0; i1 < num.length(); i1++) ++arr[Integer.parseInt(num.substring(i1, i1 + 1))];
        //如果num全是0,直接返回0
        int j;
        for (j = 9; j >= 0; j--) if (arr[j] > 0) break;
        if (j == 0) return String.valueOf(0);
        StringBuilder stringBuilder = new StringBuilder();
        int n = 0;//记录已经插入2n个字符
        for (int i = 9; i >= 0; i--)//i遍历arr
            for (int k = n; k <= i + n; k++)//k是需要返回的字符串的索引
                //对应字符数量超过1
                if (arr[i] > 1) {
                    if (i == 0 & k == 0) break;//第一位不能放0
                    stringBuilder.insert(k, i);
                    stringBuilder.insert(stringBuilder.length() - n, i);//
                    arr[i] -= 2;
                    n++;
                } else break;
        for (n = 9; n >= 0; n--) if (arr[n] == 1) break;//找出剩下的最大的字符
        if (n >= 0) stringBuilder.insert(stringBuilder.length() / 2, n);//插入到stringBuilder中间
        return stringBuilder.toString();
    }
}

题目:有m个无差别苹果,n个无差别盘子,返回总放置方法数。

注意,如果有5个苹果,3个盘子,1,1,3     1,3,1     3,1,1这三种方法是一种方法

思路1:总的方法数量=全部使用盘子的方法数量+不全部使用盘子的方法数量

public static int put01(int apple, int plate) {//剩余苹果数量,剩余盘子数量
        if (apple == 0) return 1;//没苹果了,一种方法
        if (plate == 0) return 0;//没盘子了,0种方法
        if (plate > apple) return put01(apple, apple);//盘子数量大于苹果,多余的盘子不要
        /*
        既有苹果又有盘子,且苹果数大于等于盘子数,两种情况,
        全部使用盘子,和不全部使用盘子,
        全部使用盘子就是先在每个盘子上放一个苹果,
        不全部使用盘子就是减掉一个盘子
        */
        else return put01(apple - plate, plate) + put01(apple, plate - 1);
    }

思路2:本次递归所得到的方法的数量=剩余苹果的数量-去上一个盘子使用的苹果数量+1

  public static int put02(int Last, int apple, int plate) {  //上一个盘子里的苹果数量,剩余苹果数         量,剩余盘子数量
        //测试时Last为1,因为盘子里无论如何都要有一个苹果
        if (apple == 0) return 1;//没苹果了,一种方法
        if (plate == 0) return 0;//没盘子了,0种方法
        if (Last > apple) return 0;//上一个盘子的苹果数量大于剩余苹果数量,代表之前的分配是错的,0种方         法
        int n = 0;
        for (int i = Last; i <= apple; i++) {
            n += put02(i, apple - i, plate - 1);
        }
        return n;
    }

标签:arr,return,14,int,num,苹果,盘子
From: https://www.cnblogs.com/wxlxy/p/17320062.html

相关文章

  • 每日总结-23.4.14
    <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"&g......
  • 2023-4-14自增前后缀区别
    #include<bits/stdc++.h>usingnamespacestd;intmain(){ inta=39; intb=39; cout<<a<<endl<<b<<endl; a++; ++b; cout<<"oneyearlater...."<<endl; cout<<"a="<<a<<endl<<"......
  • 4.14号今日总结
    字典另一个非常有用的Python内建数据类型是字典。序列是以连续的整数为索引,与此不同的是,字典以关键字为索引,关键字可以是任意不可变类型,通常用字符串或数值。理解字典的最佳方式是把它看做无序的键=>值对集合。在同一个字典之内,关键字必须是互不相同。一对大括号创建一个空......
  • 4.14总结
    今日学习ATM项目packagecom.fzyun;importjava.util.ArrayList;importjava.util.Random;importjava.util.Scanner;publicclassATMSystem{publicstaticvoidmain(String[]args){//1.定义一个账户类//2.定义一个集合容器,负责以后存储全部的......
  • 4.14每日总结
    所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。我们永远不要信任用户的输入,我们必须认定用户输入的数据都是不安全的,我们都需要对用户输入的数据进行过滤处理。以下实例中,输入的用户名必须为字母、数字......
  • SQL_20230414
    SQL136每类试卷得分前3名找到每类试卷得分的前3名,如果两人最大分数相同,选择最小分数大者,如果还相同,选择uid大者。examination_info表idexam_idtagdifficultydurationrelease_timeexam_record表iduidexam_idstart_timesubmit_timescore解题思路首先......
  • 2023.4.14每日总结
    cookie和session在传值中的作用,能够让我们十分方便的对于这些用户名和密码很多地方都需要的变量一直传值的问题,还使用了一些关于css布局的问题,将背景换成自己喜欢的图片,使得整个项目变得更加的好看,还学会了使用<a>进行传值,还有jsp:forward jsp:param这两个的传值和使用Login.jsp......
  • 2023-04-14 手机号码间隔
    前言:uniappinput之输入手机号需要进行间隔显示。即18800188001显示成18800188001。部分代码如下://间隔函数formatPhone(val){if(val){if(this.inputPhoneValue.replace(/\s/g,"").length==11||this.inputPhoneValue.replace(/\s/g,"").length>......
  • 2023.04.14 定时测试随笔 T2
    T2P1593因子和传送门:洛谷P1593既然要求因子和,那我们就先对\(a\)分解质因数,得:              \(a=p_1^{k_1}+p_2^{k_2}+p_3^{k_3}...+p_n^{k_n}\)所以\(a^b\)质因数分解就会得到:              \(a^b=p_1^{k_1*b}+p_2^{k_2*b}+......
  • 编程一小时2023.4.14
    1.#include<bits/stdc++.h>usingnamespacestd;classnumber{intfz,fm;friendnumberoperator+(number&n1,number&n2);public:number(inta=0,intb=1){fz=a;fm=b;}friendintgcd(inta,intb);friendintmin_gb(number&n1......