Java 题解 | #牛群排队#

牛群排队

https://www.nowcoder.com/practice/8d8ae3937cd5466eb330ca484ca5ed80

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @return int整型二维数组
     */
    public int[][] cow_permute (int[] nums) {
        // write code here
        List<List<Integer>> res = new ArrayList<>();
        List<Integer> numList = new ArrayList<>();
        for (int num : nums) {
            numList.add(num);
        }

        Collections.sort(numList);
        backTracking(numList, new ArrayList<>(), res);

        int[][] ans = new int[res.size()][nums.length];
        for (int i = 0; i < res.size(); i++) {
            for (int j = 0; j < nums.length; j++) {
                ans[i][j] = res.get(i).get(j);
            }
        }

        return ans;
    }

    private void backTracking(List<Integer> nums, List<Integer> list,
                              List<List<Integer>> res) {
        if (list.size() == nums.size()) {
            res.add(new ArrayList<>(list));
            return;
        }

        for (int i = nums.size() - 1; i >= 0; i--) {
            if (list.contains(nums.get(i))) {
                continue;
            }
            list.add(nums.get(i));
            backTracking(nums, list, res);
            list.remove(list.size() - 1);
        }
    }
    }

编程语言是Java。

该题考察的知识点是回溯算法,通过递归和回溯的方式生成给定数组的全排列。

代码简短的文字解释如下:

  1. 将传入的整型数组转换为列表形式,并进行排序。
  2. 创建一个空的列表 res 用于存储结果。
  3. 调用 backTracking 方法进行回溯,传入原始列表 nums、一个空列表作为当前排列的中间结果,以及结果列表 res。
  4. 在 backTracking 方法中,首先判断如果中间结果列表长度等于原始列表长度,说明已经生成了一个完整的排列,将其加入结果列表中,然后返回。
  5. 遍历原始列表 nums,从后往前依次取出数字。如果当前数字已经在中间结果列表中,则跳过。
  6. 将当前数字添加到中间结果列表中。
  7. 递归调用 backTracking 方法,继续生成下一个数字的排列。
  8. 每次递归返回后,将中间结果列表的最后一个数字移除,以便尝试下一个数字的组合。
  9. 最后将结果列表 res 转换为二维数组,并返回结果。
全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
04-08 00:50
点赞 评论 收藏
转发
点赞 收藏 评论
分享
正在热议
# 牛客帮帮团来啦!有问必答 #
1150458次浏览 17147人参与
# 通信和硬件还有转码的必要吗 #
11171次浏览 101人参与
# OPPO开奖 #
19167次浏览 267人参与
# 和牛牛一起刷题打卡 #
18764次浏览 1635人参与
# 实习与准备秋招该如何平衡 #
203285次浏览 3625人参与
# 大厂无回复,继续等待还是奔赴小厂 #
4937次浏览 30人参与
# 不去互联网可以去金融科技 #
20243次浏览 255人参与
# 通信硬件薪资爆料 #
265816次浏览 2484人参与
# 国企是理工四大天坑的最好选择吗 #
2199次浏览 34人参与
# 互联网公司评价 #
97631次浏览 1279人参与
# 简历无回复,你会继续海投还是优化再投? #
25031次浏览 354人参与
# 0offer是寒冬太冷还是我太菜 #
454740次浏览 5123人参与
# 国企和大厂硬件兄弟怎么选? #
53882次浏览 1012人参与
# 参加过提前批的机械人,你们还参加秋招么 #
14628次浏览 349人参与
# 硬件人的简历怎么写 #
82280次浏览 852人参与
# 面试被问第一学历差时该怎么回答 #
19376次浏览 213人参与
# 你见过最离谱的招聘要求是什么? #
27929次浏览 247人参与
# 学历对求职的影响 #
161177次浏览 1804人参与
# 你收到了团子的OC了吗 #
538603次浏览 6386人参与
# 你已经投递多少份简历了 #
344061次浏览 4963人参与
# 实习生应该准时下班吗 #
96936次浏览 722人参与
# 听劝,我这个简历该怎么改? #
63508次浏览 622人参与
牛客网
牛客企业服务