1.栈
判断括号匹配是否正确
public static boolean isValid(String s){
final String left="([{";
final String right=")]}";
Stack<Character> stk=new Stack<>();
for (int i = 0; i <s.length(); i++) {
char c = s.charAt(i);
if(left.indexOf(c)!=-1){
stk.push(c);
}else{
if(!stk.isEmpty() && stk.peek()==left.charAt(right.indexOf(c)))
stk.pop();
else
return false;
}
}
return stk.empty();
}
2.递归
function fn(n){
if(n==1){
return 1
}
return n*fn(n-1)
}
3.回溯
public static List<List<Integer>> subsets(int[] nums){
List<List<Integer>> result=new ArrayList<>();
if(nums==null||nums.length==0){
return result;
}
backtrack(result,new ArrayList<>(),nums,0);
return result;
}
private static void backtrack(List<List<Integer>> list,
List<Integer> current,
int[] nums,
int start) {
list.add(new ArrayList<>(current));
for (int i = start; i <nums.length ; i++) {
current.add(nums[i]);
backtrack(list,current,nums,i+1);
current.remove(current.size()-1);
}
}