叨叨两句
- 量变终于迎来了质变!破壁人系列中一个过去的问题终于得到了解答!
- 不但要练习,还要复习,总结思路!
题17:不同大小的两个值如何拼成一个限定的值
题目描述
书写一个类,类名为Itheima;
类中有一个方法,方法名makeBricks;
我们想做一排砖(长度自己定),我们有一些小砖(每块1英寸)和大砖(每块5英寸),
如果用我们选择的砖块的数量能够拼接成功,则返回true;否则返回false,
例如:makeBricks(3, 1, 8) → true
(尽量不使用循环,太耗费时间,会导致后台验证超时)
提示
方法调用 | 期望值 |
---|---|
makeBricks(3,1,8) | true |
makeBricks(3,1,9) | false |
makeBricks(3,2,10) | true |
public class Itheima {
public boolean makeBricks(int a, int b, int c){
//指定长度最多可使用的大砖数
int max = c / 5;
//拼接分两种情况:b >= max 则最多使用max b < max 则使用b
if(b >= max){
//需求小砖数
if(c - max * 5 <= a){
return true;
} else {
return false;
}
} else {
//需求小砖数
if(c- b * 5 <= a){
return true;
} else {
return false;
}
}
}
}
题18:分拣思想+重置计数器+求一组数最大值
题目描述:
书写一个类,类名为Itheima;
类中有一个方法,方法名maxBlock;
给定一个字符串,返回该字符串中连续出现个数最多的字符的数量。
提示:
方法调用 | 期望值 |
---|---|
maxBlock("hoopla") | 2 |
maxBlock("abbCCCddBBBxx") | 3 |
maxBlock("") | 0 |
import java.util.HashMap;
public class Itheima {
public int maxBlock(String str){
int max = 0;//用于记录某个字符连续出现最大次数
int count = 1;//用于作为中间变量,记录正在遍历的字符的个数
HashMap<Character,Integer> map = new HashMap<>();//Key:字符 Value:最大连续出现次数
for (int i = 0; i < str.length() - 1; i++) {
char c1 = str.charAt(i);
char c2 = str.charAt(i + 1);
if(c1 == c2){
count++;
map.put(c1,count);
if(count > max){
max = count;
map.put(c1, max);
}
} else {
count = 1;
map.put(c2,count);
}
}
int totalMax = 0;
for (Character c : map.keySet()) {
if(map.get(c) >= totalMax){
totalMax = map.get(c);
}
}
return totalMax;
}
}
题19:获取镜像元素
题目描述
书写一个类,类名为Itheima;
类中有一个方法,方法名mirrorEnds;
给定一个字符串,如果字符串的前串和后串有镜面关系,即返回前串作为方法的返回值,例如:字符串
"abxyzba"的前串"ab"与后串"ba"则为镜面关系,那么返回字符串"ab",如果前串和后串都是相同字符串
就原路返回,例如:"xxYxx"返回"xxYxx"。如果两者都不符合就返回空。
提示
方法调用 | 期望值 |
---|---|
mirrorEnds("abXYZba") | "ab" |
mirrorEnds("abca") | "a" |
mirrorEnds("aba") | "aba" |
public class Itheima {
public String mirrorEnds(String str){
String sumStr = "";
for (int i = 0; i < str.length(); i++) {
if(str.charAt(i) == str.charAt(str.length() - 1 - i)){
sumStr = sumStr + str.charAt(i);
}
if(sumStr.length() != i + 1){
break;
}
}
if("".equals(sumStr)){
return "";
}
if(sumStr.length() == 1){
return sumStr;
}
boolean sumFlag = true;
boolean flag = false;
for (int i = 0; i < sumStr.length() - 1; i++) {
if(sumStr.charAt(i) == sumStr.charAt(i + 1)){
flag = true;
}
sumFlag = sumFlag && flag;
}
if(sumFlag){
return str;
} else {
return sumStr;
}
}
}
题20:轮流执行代码
题目描述
书写一个类,类名为Itheima;
类中有一个方法,方法名mixString;
给定两个字符串参数a和b,创建一个更大的字符串,由a的第一个字符,b的第一个字符,
a的第二个字符,b的第二个字符等组成。 任何剩余的字符在结果的末尾。
例如:"abc"和"xyz"返回的是:"axbycz".
提示
方法调用 | 期望值 |
---|---|
mixString("abc","xyz") | "axbycz" |
mixString("Hi","There") | "HTihere" |
mixString("xxxx","There") | "xTxhxexre" |
public class Itheima {
public String mixString(String a,String b){
String sumStr = "";
int maxTimes = a.length() + b.length();
if(a.length() >= b.length()){
for(int i = 0; i < maxTimes; i++){
if(i / 2 < b.length()){
if(i % 2 == 0){
sumStr = sumStr + a.charAt(i / 2);
} else {
sumStr = sumStr + b.charAt(i / 2);
}
} else {
sumStr = sumStr + a.substring(b.length());
break;
}
}
} else {
for(int i = 0; i < maxTimes; i++){
if(i / 2 < a.length()){
if(i % 2 == 0){
sumStr = sumStr + a.charAt(i / 2);
} else {
sumStr = sumStr + b.charAt(i / 2);
}
} else {
sumStr = sumStr + b.substring(a.length());
break;
}
}
}
return sumStr;
}
}
该题的简单解法
public class Itheima {
public String mixString(String a,String b){
String sumStr = "";
if(a.length() >= b.length()){
String endStr = a.substring(b.length());
for(int i = 0; i < b.length(); i++){
sumStr += a.charAt(i) +"" + b.charAt(i);
}
sumStr += endStr;
} else {
String endStr = b.substring(a.length());
for(int i = 0; i < a.length(); i++){
sumStr += a.charAt(i) + "" + b.charAt(i);
}
sumStr += endStr;
}
return sumStr;
}
}
题21:标记思想的典型运用
题目描述
书写一个类,类名为Itheima;
类中有一个方法,方法名only14;
给定一个整型数组,如果所有元素都是1和4或者其中之一,就返回true。
提示
方法调用 | 期望值 |
---|---|
only14([1,4,1,4]) | true |
only14([1,4,2,4]) | false |
only14([1,1]) | true |
public class Itheima {
public boolean only14(int[] arr){
boolean sumFlag = true;
boolean flag = false;
for (int i = 0; i < arr.length; i++) {
if(arr[i] == 1 || arr[i] == 4){
flag = true;
} else {
flag = false;
}
sumFlag = sumFlag && flag;
}
return sumFlag && flag;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。