JS之简单算法题

一、用 JavaScript 写一个函数,输入 int 型,返回整数逆序后的字符串。如:输入整型 1234,返回字符串“4321”。要求必须使用递归函数调用,不能用全局变量,输入函数必须只有一个参数传入,必须返回字符串。

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元,每种硬币足够多,买一本书需要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], ...
二、消除冗余,加速计算

四、给定m行n列的网格,有一个机器人从左上角(0,0)出发,每一步可以向下或者向右走一步,问有多少种不同的方式走到右下角?

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