题解 | #牛牛的字符串排列#

牛牛的字符串排列

https://www.nowcoder.com/practice/5286dafdcdff4c9a9e92c7dc440143db?tpId=363&tqId=10618545&ru=/exam/oj&qru=/ta/super-company23Year/question-ranking&sourceUrl=%2Fexam%2Foj

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @param k int整型
     * @return string字符串一维数组
     */
    public String[] getPermutation(String s, int k) {
        char[] chars = s.toCharArray(); // 将字符串转化为字符数组
        boolean[] used = new
        boolean[chars.length]; // 用于标记字符是否已经被使用过
        StringBuilder path = new StringBuilder(); // 用于保存当前的排列结果
        List<String> result = new ArrayList<>(); // 用于保存所有的排列结果
   Arrays.sort(chars);
        backtrack(chars, used, path, result, k); // 调用回溯函数
        String [] str = new String[result.size()];
        for (int i = 0; i < result.size(); i++) {
            str[i] = result.get(i);
        }
        return str; // 返回结果集
    }

    private void backtrack(char[] chars, boolean[] used, StringBuilder path,
                           List<String> result, int k) {
        if (result.size() == k) { // 如果已经生成了k个排列,直接返回
            return;
        }

        if (path.length() ==
                chars.length) { // 如果已经生成了一个完整的排列,添加到结果集中
            result.add(path.toString());
            return;
        }

        for (int i = 0; i < chars.length; i++) { // 遍历字符数组
            if (used[i]) { // 如果字符已经被使用过,跳过
                continue;
            }

            path.append(chars[i]); // 将当前字符添加到路径中
            used[i] = true; // 标记当前字符为已使用

            backtrack(chars, used, path, result,
                      k); // 递归调用回溯函数,生成下一个字符的排列

            path.deleteCharAt(path.length() -
                              1); // 回溯,将当前字符从路径中移除
            used[i] = false; // 标记当前字符为未使用
        }
    }
}

本题知识点分析:

1.回溯法

2.集合存取

3.数组遍历

本题解题思路分析:

1.先sort排序chars字符串

2.利用回溯法

3.1 如果已经生成了k个排列,直接返回

3.2 如果已经生成了一个完整的排列,添加到结果集中

3.3 如果字符已经被使用过,跳过

本题使用编程语言: Java

全部评论

相关推荐

07-11 11:15
中南大学 Java
好可爱的hr姐姐哈哈哈哈
黑皮白袜臭脚体育生:兄弟们貂蝉在一起,吕布开了
点赞 评论 收藏
分享
头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
06-26 22:20
门头沟学院 Java
码农索隆:让你把简历发给她,她说一些套话,然后让你加一个人,说这个人给你改简历,然后开始卖课
我的求职精神状态
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 11:30
仁者伍敌:kpi都懒得刷了属于是
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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