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), '种方式');