算法之回溯模版1无返回值

package com.zhang.reflection.面试.算法模版.回溯模版.模版;
import java.util.HashSet;
import java.util.Set;
/**
 *     剑指 Offer 38. 字符串的排列
 *
 *     输入一个字符串,打印出该字符串中字符的所有排列。
 *
 *
 *
 *     你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
 *
 *
 *
 *     示例:
 *
 *     输入:s = "abc"
 *     输出:["abc","acb","bac","bca","cab","cba"]
 *
 *
 *
 *     限制:
 *
 *             1 <= s 的长度 <= 8
 * 模版
 * private void backtrack("原始参数") {
 *         //终止条件(递归必须要有终止条件)
 *         if ("终止条件") {
 *             //一些逻辑操作(可有可无,视情况而定)
 *             return;
 *         }
 *
 *         for (int i = "for循环开始的参数"; i < "for循环结束的参数"; i++) {
 *             //一些逻辑操作(可有可无,视情况而定)
 *
 *             //做出选择
 *
 *             //递归
 *             backtrack("新的参数");
 *             //一些逻辑操作(可有可无,视情况而定)
 *
 *             //撤销选择
 *         }
 * }
 */
public class 模版 {
    public String[] permutation(String s) {
        Set<String> res = new HashSet<>();
        back(s.toCharArray(),"",new boolean[s.length()],res);
        //toArray转为object类型的数组,要想转为指定类型的数组,需要我们new String[0] 注意里面的字符最大是0-res.size(),再多会补null;
        return res.toArray(new String[res.size()]);

    }
    private void back(char[] chars,String tmp,boolean[] visited,Set<String> res){
        //首先是终止条件
        if(chars.length == tmp.length()){
            //一些所需要的操作
            res.add(tmp);
            return;
        }
        for(int i=0;i<chars.length;i++){
            //排除一些选项或者跳过某些东西
            if(visited[i]) continue;
            //做出选择
            visited[i] =true;
            //回溯
            back(chars,tmp+chars[i],visited,res);
            //撤销选择
            visited[i] = false;
        }

    }
}

全部评论

相关推荐

湫湫湫不会java:1.在校经历全删了2.。这些荣誉其实也没啥用只能说,要的是好的开发者不是好好学生3.项目五六点就行了,一个亮点一俩行,xxx技术解决,xxx问题带来xxx提升。第一页学历不行,然后啥有价值的信息也没有,到第二页看到项目了,第一个项目九点,第二个项目像凑数的俩点。总体给人又臭又长,一起加油吧兄弟
点赞 评论 收藏
分享
05-16 11:16
已编辑
东华理工大学 Java
牛客73769814...:盲猜几十人小公司,庙小妖风大,咋不叫她去4️⃣呢😁
牛客创作赏金赛
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务