首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >满足特定条件的交换元素的充分算法

满足特定条件的交换元素的充分算法
EN

Stack Overflow用户
提问于 2019-11-22 10:42:20
回答 1查看 55关注 0票数 1

给定两个正数N和K,从N中找出最小的两个数交换成两个新数A和B,差值(A - B)等于K,如果有多个解,则使用最大的A的解。

例如

我们有N= 9834216和K= 8826,我们交换16形成新的数字9168342,A= 9168和B= 342,A-B= 9168 - 342 = 8826。

EN

回答 1

Stack Overflow用户

发布于 2019-11-22 11:55:20

代码语言:javascript
复制
let N = 9834216, K = 8826;
let count = 0;

function fn(nArr, k, n) {
  if (n == 0) {
    let temp = -k;
    if (temp <= 0) {
      return;
    }
    let tArr = [...nArr];
    while (temp > 0) {
      let temp1 = temp % 10;
      let tId = tArr.indexOf(temp1);
      if (tId < 0) {
        return;
      }
      tArr.splice(tId, 1);
      temp = Math.floor(temp / 10);
    }
    if (tArr.length == 0) {
      console.log((K - k) + "-" + (-k) + "=" + K);
      count++;
    }
  } else {
    for (let i in nArr) {
      let tArr = [...nArr];
      tArr.splice(i, 1);
      fn(tArr, k - Math.pow(10, n - 1) * nArr[i], n - 1);
    }
  }
}

function getAB(N, K) {
  let nArr = [],
    n = N;
  while (n > 0) {
    nArr.push(n % 10);
    n = Math.floor(n / 10);
  }
  nArr.sort();
  nArr.reverse();
  for (let i = nArr.length; i > nArr.length / 2; i--) {
    fn(nArr, K, i);
  }
}

getAB(N, K);
console.log(count + " solutions");

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58986706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档