1.问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利
输入:
4个1-10的数字。[数字允许重复,但每个数字仅允许使用一次,测试用例保证无异常数字]
输出:
true or false
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
double result=0.0;
int[] num=new int[4];
while(input.hasNext()){
int[] temp=new int[4];
for(int i=0;i<4;i++){
num[i]=input.nextInt();
}
System.out.println(check(num,temp,result));
}
input.close();
}
private static boolean check(int[] num,int[] temp,double result) {
for(int i=0;i<num.length;i++){
if(temp[i]==0){
temp[i]=1;
if(check(num,temp,result+num[i])
|| check(num,temp,result-num[i])
|| check(num,temp,result*num[i])
|| check(num,temp,result/num[i])){
return true;
}
temp[i]=0;
}
}
if(result==24){
return true;
}else{
return false;
}
}
}
2.给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
辅助栈法
class Solution {
private static final Map<Character,Character> map = new HashMap<Character,Character>(){{
put('{','}'); put('[',']'); put('(',')'); put('?','?');
}};
public boolean isValid(String s) {
if(s.length() > 0 && !map.containsKey(s.charAt(0))) return false;
LinkedList<Character> stack = new LinkedList<Character>() {{ add('?'); }};
for(Character c : s.toCharArray()){
if(map.containsKey(c)) stack.addLast(c);
else if(map.get(stack.removeLast()) != c) return false;
}
return stack.size() == 1;
}
}
3.有1,4,16,64,1024面额的硬币,输入一个价值N,最少要多少硬币
If(N > 1024){
int num = N/1024;
int N = N%1024
}
Int sub = 1024 – N;
Int a = sub/64;
Int b = (sub%64)/16;
Int c = (sub%16)/4;
Int d = sub/4;
return num+a+b+c+d;