JSの単純なアルゴリズム

1. JavaScriptで関数を記述し、int型を入力し、整数を逆にした後で文字列を返します。たとえば、整数1234を入力し、文字列 "4321"を返します。グローバル変数ではなく、再帰的な関数呼び出しを使用する必要があります。入力関数にはパラメーターを1つだけ指定し、文字列を返す必要があります。

function reverseInt(num) {
  if (num < 10) {
    return num;
  }
  var remainder = num % 10;
  var result = parseInt(num / 10);
  console.log(result, remainder);
  return remainder.toString() + reverseInt(result);
}

次に、額面が2元、5元、7元の3種類のコインがあり、それぞれの種類のコインで十分です。本を購入するには27元かかります。相手がお金を探すことなく、最小のコインの組み合わせで支払う方法は?

var A = [2, 5, 7];
var M = 27;
function coinCange(A, M) {
  var f = new Array(M + 1);
  var n = A.length;

  f[0] = 0;
  for (var i = 1; i <= M; i++) {
    f[i] = Infinity;
    for (var j = 0; j < n; j++) {
      if (i >= A[j] && f[i - A[j]] !== Infinity) {
        f[i] = Math.min(f[i - A[j]] + 1, f[i]);
      }
    }
  }

  if (f[M] == Infinity) {
    f[M] = -1;
  }

  return f[M];
}

console.log('最少组合', coinCange(A, 1));
console.log('最少组合', coinCange(A, 2));
console.log('最少组合', coinCange(A, 5));
console.log('最少组合', coinCange(A, 7));
console.log('最少组合', coinCange(A, 27));

第三に、最もダイナミックなプログラミングを求めて

一、动态规划组成部分:
    1、确定状态
       最后一步(最优策略中使用的最后一枚硬币A)
       化成子问题(最少的硬币拼出更小的面值27-A)
    2、转移方程
       f[X] = min{f[X-2]+1, f[X-5]+1, f[X-7]+1}
    3、初始化条件和边界情况
       f[0] = 0, 如果不能拼出Y,f[Y]=正无穷
    4、计算顺序
       f[0], f[1], f[2], ...
二、消除冗余,加速计算

4. m行n列のグリッドがある場合、左上隅(0,0)から始まるロボットがあり、各ステップは1つ下または右に移動できます。右下隅に移動する方法はいくつありますか?

function uniquePaths(m, n){
  var f = [];
  for(var i = 0; i < m; i++){
    f[i] = new Array();
    for(var j = 0; j < n; j++){
      if(i==0 || j==0){
        f[i][j] = 1;
      }else{
        f[i][j] = f[i - 1][j] + f[i][j - 1];
      }
    }
  }
  return f[m-1][n-1];
}

console.log('共有', uniquePaths(3, 4), '种方式');
console.log('共有', uniquePaths(1, 1), '种方式');
console.log('共有', uniquePaths(2, 2), '种方式');

 

公開された35元の記事 ウォンの賞賛1 ビュー6718

おすすめ

転載: blog.csdn.net/qq_36162529/article/details/105178751