zoukankan      html  css  js  c++  java
  • 剑指 Offer 38. 字符串的排列

     又是一个回溯法的题目,但难度更大了,很多地方容易出错

    主要是多了可能的重复

    二是字符数组和字符串的转换问题

    这题的核心在于交换,我们可以想象为

    确认第一位的值,就是将第1位和其他所有位做交换,做完交换后的后面的元素就是剩下的可选列表

    去重时则需要使用到HashSet

    “这个技巧应该之前的数字排列的回溯法题都能用”,比修改选择列表和路径/把路径弄成HashSet都要省时间

    class Solution {
        List<String> res=new LinkedList<>();//结果,先用集合框架存储
        public String[] permutation(String s) {
            char[] charArray=s.toCharArray();
            backtracking(charArray,0);
            return res.toArray(new String[res.size()]);
        }
    
        private void backtracking(char[] chars,int indexFrom)
        {
            //返回条件
            if(indexFrom==chars.length-1)
            {
                res.add(String.valueOf(chars));//字符数组转字符串
                return;
            }
    
    
            Set<Character> charSet=new HashSet<>();
            int length=chars.length;//是.length
            for(int i=indexFrom;i<length;i++)
            {
                // if(charSet.contains(char[])) 怎么去重?
                if(charSet.contains(chars[i]))
                {
                    continue;
                }
                charSet.add(chars[i]);
                swap(chars,indexFrom,i);
                backtracking(chars,indexFrom+1);//数组不会越界
                swap(chars,indexFrom,i);
            }
        }
    
        private void swap(char[] chars,int indexFrom,int indexTo)//交换指定位置字符
        {
            char temp=chars[indexFrom];
            chars[indexFrom]=chars[indexTo];
            chars[indexTo]=temp;
        }
    }

    注意字符数组和字符串的转换:

    char[] charSet={'a','b'};
    String str=String.valueOf(charSet);//字符数组转字符串
    
    String str1="sdfd";
    char[] charSet1=str1.toCharArray();//字符串转字符数组

    注意集合转数组

    return res.toArray(new String[res.size()])

    这样转成数组后才是有泛型的,如果是return res.toArray(); 则是一个Object类型的数组

  • 相关阅读:
    make输出全部重定向到文件
    python selenium-webdriver 元素定位(三)
    通过vmware 启动cloudera-quickstart-vm-5.10.0-0-vmware.zip镜像无法启动。
    编写第一个python selenium-webdriver程序(二)
    sublime Text3 新建文件时定义模块
    python selenium-webdriver 环境搭建(一)
    gitlab 添加SSH Key
    python 使用 'python -m pip install --upgrade pip'提示PermissionError: [WinError 5] 拒绝访问
    bitnami gitlab 配置域名
    bitnami gitlab 安装
  • 原文地址:https://www.cnblogs.com/take-it-easy/p/14506719.html
Copyright © 2011-2022 走看看