算法面试之回溯法
来源:互联网 发布:淘宝卖假货没人管吗 编辑:程序博客网 时间:2024/05/21 02:49
回溯法是一种暴力查找法,适合于探索路径,探索每一步的走法。如果符合就走下去,不符合就回溯,然后再去寻找。通过这点就能分辨出一道题是不是在考你回溯法。
看我博客的人请注意,我写的不规范,这是方便自己理解,代码是不能运行的,有疑问请加qq:823071447 备注:回溯法
算法框架.
int n =0;
void backtrack(int n){
if(n=aim)
print "这是一个成功路径"
else{
for(int i=0;i<aim;i++){
if (is_ok(n,i))
backtrack(n+1)
}
}
}
面试题1:八皇后问题
int row=0;
int aim=8;
void backtrack(int n){
if(row==aim)
print "这是一个成功路径"
else{
for(int i=0;i<colums;i++){
if(is_ok(row,i)){
backtrack(row+1)
}
}
}
}
面试题2:字母打印问题(剑指offer)
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
ArrayList<String> list = new ArrayList<String>();
int j =0;
public ArrayList<String> Permutation(String str) {
if (str != null && str.length() > 0) {
change(str.toCharArray(), 0);
Collections.sort(list);
}
for (String st : list) {
System.out.println(st);
}
return list;
}
public void change(char[] str_ch,int i){
if(i == str_ch.length - 1) {
String val = String.valueOf(str_ch);
if (!list.contains(val))
list.add(val);
}
else{
for(int j=i;j<str_ch.length;j++){
swap(str_ch,i,j);
change(str_ch,i+1);
swap(str_ch,i,j);
}
}
}
private void swap(char[] cs, int i, int j2) {
// TODO Auto-generated method stub
char temp = 0;
temp = cs[i];
cs[i] = cs[j2];
cs[j2] = temp;
}
public static void main(String[] args){
Solution test = new Solution();
test.Permutation("abcd");
}
}
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
ArrayList<String> list = new ArrayList<String>();
int j =0;
public ArrayList<String> Permutation(String str) {
if (str != null && str.length() > 0) {
change(str.toCharArray(), 0);
Collections.sort(list);
}
for (String st : list) {
System.out.println(st);
}
return list;
}
public void change(char[] str_ch,int i){
if(i == str_ch.length - 1) {
String val = String.valueOf(str_ch);
if (!list.contains(val))
list.add(val);
}
else{
for(int j=i;j<str_ch.length;j++){
swap(str_ch,i,j);
change(str_ch,i+1);
swap(str_ch,i,j);
}
}
}
private void swap(char[] cs, int i, int j2) {
// TODO Auto-generated method stub
char temp = 0;
temp = cs[i];
cs[i] = cs[j2];
cs[j2] = temp;
}
public static void main(String[] args){
Solution test = new Solution();
test.Permutation("abcd");
}
}
这个问题与上一题不同,但同样的寻路的问题,如果不行,就换一种方法。
- 算法面试之回溯法
- 《面试-回溯法》 ---五种经典的算法问题之回溯法python
- 算法设计之回溯法
- 常用算法之回溯法
- 常用算法之回溯法
- 算法分析之回溯法
- 经典算法之回溯法
- 常用算法之-回溯法
- 算法----五大算法之回溯法
- 算法----五大算法之回溯法
- 算法之回溯算法
- [算法之回溯算法]
- 常用算法设计方法之回溯法
- 常用算法设计之回溯法!
- 五大算法之四--回溯法
- 五大算法之四--回溯法
- 五大常用算法之回溯法
- 五大算法之四--回溯法
- 使用freertos V9.0.0需要注意的几个问题
- gulp工具使用
- eclipse 配置黑色主题
- PHP学习(1)-基础总结
- C# DateTime日期格式化
- 算法面试之回溯法
- Ubuntu 17.04 py-faster-rcnn only CPU
- 全文检索
- leetcode_649. Dota2 Senate ? 待解决
- 【Deep Learning】R-CNN
- 从零开始在iPhone上运行视频流实时预测模型应用,只需10步
- 学车经验总结(科目二)
- linux下nohup的使用
- 常见的内存泄漏