首页 > 其他分享 >力扣——剑指 Offer 38. 字符串的排列(全排列)

力扣——剑指 Offer 38. 字符串的排列(全排列)

时间:2022-08-21 14:01:18浏览次数:83  
标签:排列 end String int 力扣 start 38 字符串

题目描述

输入一个字符串,打印出该字符串中字符的所有排列。

你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。

 

示例:

输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]
 

限制:

1 <= s 的长度 <= 8

Java代码

class Solution {

    private List<String> res = new ArrayList<>();

    public String[] permutation(String s) {
        char[] c = s.toCharArray();
        A(c, 0, c.length - 1);
        return res.toArray(new String[0]);
    }

    public void A(char[] c, int start, int end) {
        if (start >= end) {
            res.add(new String(c));
            return;
        }
        // 固定start,即start~end依次枚举,每次从后面拿一个跟start进行交换,然后让交换后的start + 1~end这些字符进行全排列
        for (int i = start; i <= end; i++) {
            if (canSwap(c, start, i)) {
                swap(c, start, i);
                A(c, start + 1, end);
                swap(c, i, start);
            }
        }
    }

    public void swap(char[] c, int i, int j) {
        char tmp = c[i];
        c[i] = c[j];
        c[j] = tmp;
    }
    
    public boolean canSwap(char[] c, int i, int j) {
        char target = c[j];
        // 能交换的前提是:前面不能够出现跟当前数相同的数
        for (int k = i; k < j; k++) {
            if (c[k] == target) {
                return false;
            }
        }
        return true;
    }
}

评测结果

力扣链接:https://leetcode.cn/problems/zi-fu-chuan-de-pai-lie-lcof/

标签:排列,end,String,int,力扣,start,38,字符串
From: https://www.cnblogs.com/pengsay/p/16609908.html

相关文章

  • 438. 找到字符串中所有字母异位词
     labuladong题解思路难度中等982收藏分享切换为英文接收动态反馈给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不......
  • springMvc38-restful的crud实现删除方式
    上图·是目录结构,本节是有问同学的,当好好总结pom.xml   <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan......
  • 力扣刷题-1
    自己只会暴力求解,看见大佬的进阶求解,感觉tql,题源链接......
  • 【搜索】力扣126:单词接龙 II(过于hard)
    给定一个起始字符串和一个终止字符串,以及一个单词表,求是否可以将起始字符串每次改一个字符,直到改成终止字符串,且所有中间的修改过程表示的字符串都可以在单词表里找到。若......
  • 【队列】力扣239:滑动窗口最大值
    给定一个整数数组和一个滑动窗口大小,求在这个窗口的滑动过程中,每个时刻其包含的最大值。示例:输入:nums=[1,3,-1,-3,5,3,6,7],k=3输出:[3,3,5,5,6,7]解释:滑动窗口......
  • 【队列】力扣218:天际线问题
    给定建筑物的起止位置和高度,返回建筑物轮廓(天际线)的拐点。输入是一个二维整数数组,表示每个建筑物的[左端,右端,高度];输出是一个二维整数数组,表示每个拐点的横纵坐标。......
  • 338. 比特位计数
     难度简单1064收藏分享切换为英文接收动态反馈给你一个整数 n ,对于 0<=i<=n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n+1 的数......
  • LCD液晶显示驱动器/液晶段码屏驱动芯片VK1623/VK0384更少脚位
     产品品牌:永嘉微电/VINKA产品型号:VK1623封装形式:LQFP100/QFP10产品年份:新年份原厂直销,样品免费,技术支持,价格优势。 概述:VK1623S是一个点阵式存储映射的LCD驱动器,可......
  • 【数据库】SQLite 3.38改进了JSON支持,增强了CLI功能
    SQLite3.38作为这个流行的嵌入式SQL数据库库在2022年的第一次重大更新被发布。早在2015年的SQLite3.9中,它就增加了JSON1模块,开始建立对SQLite数据库内存储JSON数据的支......
  • 新浪英雄大厅、英雄大厅、新浪微博英雄大厅、互粉大厅里的英雄大厅、 (2014-11-26 12:
    新浪英雄大厅、英雄大厅、新浪微博英雄大厅、互粉大厅里的英雄大厅、最近在新浪微博的应用中看到一个互粉大厅,其中里面有一个英雄大厅的消除类游戏,感觉很好玩。此游戏也......