Permutations

Given an array nums of distinct integers, return all the possible permutations. You can return the answer in any order.

Example 1:

Input: nums = {1,2,3}
Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

Approach

Java

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

public class Permutations {
    public static void main(String[] args) {
        int nums[] = { 123 };
        List<List<Integer>> res = permute(nums);
        System.out.println(Arrays.asList(res));
    }

    static List<List<Integer>> ans;

    static void generate(int lint rList<Integernums) {
        if (l == r) {
            List<Integerlist = new ArrayList<Integer>();
            list.addAll(nums);
            ans.add(list);
        } else {
            for (int i = l; i <= r; i++) {
                Collections.swap(nums, l,i);
                generate(l + 1, r, nums);
                Collections.swap(nums, l,i);
            }
        }
    }

    static List<List<Integer>> permute(int[] nums) {
        int n = nums.length;
        ans = new ArrayList<List<Integer>>();
        generate(0, n - 1Arrays.stream(nums).boxed().
                        collect(Collectors.toList()));
        return ans;
    }
}

C++

#include <bits/stdc++.h>
using namespace std;

vector<vector<int>> ans;
void generate(int l,int r,vector<int&nums)
{
        if(l==r)
        {
            
                ans.push_back(nums);
        }
        else
        {
            for(int i=l;i<=r;i++)
            {
                swap(nums[l],nums[i]);
                generate(l+1,r,nums);
                swap(nums[l],nums[i]);
            }
        }
}
vector<vector<int>> permute(vector<int>& nums
{
    int n=nums.size();
    ans.clear();
    generate(0,n-1,nums);
    return ans;  
}
int main()
{
    vector<intnums ={1,2,3};
    vector<vector<int>> res=permute(nums);
    cout<<"[";
    for(int i=0;i<res.size();i++)
     {
         cout<<"[";
         for(int j=0;j<res[i].size();j++)
           {
               cout<<res[i][j];
               if(j!=res[i].size()-1)
                  cout<<",";

           }
           cout<<"]";
           if(i!=res.size()-1)
             cout<<",";
     }
    cout<<"]";
}



No comments:

Post a Comment