next_permutationをJSで実装する
2021-07-225 min read
目次
概要
C++で提供されている順列を生成する next_permutation のJS実装です。
ソース
順列が存在する場合はtrueを返し、そうでなければfalseを返します。
function next_permutation(arr) {
for (let i = arr.length - 2; i >= 0; i--) {
if (arr[i] < arr[i + 1]) {
for (let j = arr.length - 1; j > i; j--) {
if (arr[j] > arr[i]) {
[arr[i], arr[j]] = [arr[j], arr[i]];
const len = (arr.length - (i + 1)) >> 1;
for (let k = 0; k < len; k++) {
[arr[i + 1 + k], arr[arr.length - 1 - k]] = [
arr[arr.length - 1 - k],
arr[i + 1 + k],
];
}
return true;
}
}
}
}
return false;
}
使い方
let row = Array.from(Array(3).keys());
do {
console.log(row);
} while (next_permutation(row));
// 0,1,2
// 0,2,1
// 1,0,2
// 1,2,0
// 2,0,1
// 2,1,0
参考
Recommends
New Posts
Hot posts!
Date
Tags
(110)
(54)
(54)
(47)
(45)
(36)
(30)
(29)
(24)
(24)
(22)
(21)
(21)
(20)
(19)
(17)
(16)
(16)
(15)
(14)
(12)
(12)
(12)
(12)
(12)
(12)
(11)
(10)
(10)
(10)
(10)
(10)
(9)
(9)
(8)
(8)
(8)
(8)
(7)
(7)
(6)
(6)
(6)
(6)
(6)
(5)
(5)
(5)
(5)
(4)
Author