掘金AI刷题小总结第一篇 | 豆包MarsCode AI刷题

119 阅读4分钟

1.寻找最大葫芦

在一场经典的德州扑克游戏中,有一种牌型叫做“葫芦”。“葫芦”由五张牌组成,其中包括三张相同牌面值的牌 aa 和另外两张相同牌面值的牌 bb。如果两个人同时拥有“葫芦”,我们会优先比较牌 aa 的大小,若牌 aa 相同则再比较牌 bb 的大小。

在这个问题中,我们对“葫芦”增加了一个限制:组成“葫芦”的五张牌牌面值之和不能超过给定的最大值 maxmax。牌面值的大小规则为:A > K > Q > J > 10 > 9 > ... > 2,其中 A 的牌面值为1,K 为13,依此类推。

给定一组牌,你需要找到符合规则的最大的“葫芦”组合,并输出其中三张相同的牌面和两张相同的牌面。如果找不到符合条件的“葫芦”,则输出 “0, 0”。

image.png

思路

记录不同牌面值的张数,看是否满足条件,满足条件的记录下来并排序。然后遍历这个数组,找到总和最大的,返回。有个地方需要注意:A的值是1,但是牌面值最大的,要转换一下。

C++代码

image.png

image.png

2.构造特定数组的逆序拼接

小U得到了一个数字n,他的任务是构造一个特定数组。这个数组的构造规则是:对于每个i从1到n,将数字n到i逆序拼接,直到i等于n为止。最终,输出这个拼接后的数组。

例如,当n等于3时,拼接后的数组是 [3, 2, 1, 3, 2, 3]。

image.png

思路

两层循环解决:外层循环数是n,内层是每次的逆序数组。结果数组的大小为1+2+...+n,即为n(n+1)/2n*(n+1)/2

Java代码

image.png

3.数字字符串格式化

小M在工作时遇到了一个问题,他需要将用户输入的不带千分位逗号的数字字符串转换为带千分位逗号的格式,并且保留小数部分。小M还发现,有时候输入的数字字符串前面会有无用的 0,这些也需要精简掉。请你帮助小M编写程序,完成这个任务。

image.png

思路

可能的字符串:没有小数点及后面的部分、有小数点及后面的部分,再细分可以分为有前导0、无前导0。

先把头部的‘0’去掉,然后截取小数点前的字符串,对它进行处理:从尾部遍历,每三个字符就插入一个',',要注意如果原来的字符串长度刚好是3的倍数,就会多插一个',',所以在插入后判断一下,做个去除。最后再根据判断条件拼接。

Java代码

image.png

4.二进制反码转换问题

小C在学习二进制运算,他了解到每个非负整数都有其二进制表示。例如,整数 5 可以被表示为二进制 "101",整数 11 可以被表示为二进制 "1011",并且除了 N = 0 外,任何二进制表示中都不含前导零。

二进制的反码表示是将每个 1 变为 0,每个 0 变为 1。例如,二进制数 "101" 的二进制反码为 "010"。现在小C想知道,给定一个十进制数 N,它的二进制反码对应的十进制数是多少。

image.png

思路

把数字化为二进制并转成字符串进行处理,然后将字符串转换成反码,再化为数字。

image.png

ps: 写的时候用到了int和String相互转换以及String字符串反转。

1.int转String

//法一
int number = 123;
String text = String.valueOf(number); // 使用String.valueOf()方法
String text2 = Integer.toString(number); // 使用Integer.toString()方法
//法二
int number = 123;
String text = number + ""; // 直接使用加号操作符

2.String转成int:

String str = "123";
int num = Integer.parseInt(str);

3.String字符串反转:

    //法一:
    for(int i=s.length()-1;i>=0;i--){
         if(s.charAt(i)=='0')
         ss+=s.charAt(i);
    }
    //法二:

    //String转成StringBuilder,然后用他的reverse方法,再转成String

     String  rev=new StringBuilder(s).reverse().toString();

5.二进制之和

小U和小R喜欢探索二进制数字的奥秘。他们想找到一个方法,将两个二进制字符串相加并以十进制的形式呈现。这个过程需要注意的是,他们的二进制串可能非常长,所以常规的方法可能无法处理大数。小U和小R希望你帮助他们设计一个算法,该算法能在保证时间复杂度不超过O(n^2)的前提下,返回两个二进制字符串的十进制求和结果。

image.png

思路

用Java的BigInteger类,太方便了!

Java代码

image.png