Skip to content

1 浏览器插件 Monica

统计信息:字数 3641 阅读8分钟

https://chat.openai.com/ 这个国内原因无法直接访问时,所以用 Monica 替代。

Monica是Chrome扩展程序,是AI辅助驾驶员。您可以与Monica随时随地聊天,Monica可以帮助您轻松创建文案,并将文本插入任何位置。

因为官方的 chatGPT4 需要 token 和注册,这个插件每天提供30次免费查询。付费版本每月 60 元,有更多的查询次数。打开侧栏的快捷键是 command + M。

账户ID:3f094d409dd941bea8032dba22d7dded

邮箱:michael18811380328@gmail.com

姓名:Michael An

https://monica.im/billing

提问:JavaScript 语言中,使用动态规划算法,解决斐波那契数列问题。

回答如下,看起来非常智能

动态规划是一种常用的算法思想,可以用来解决很多问题,包括斐波那契数列问题。在 JavaScript 中,我们可以使用动态规划来计算斐波那契数列。

以下是使用动态规划解决斐波那契数列问题的 JavaScript 代码示例:

在上面的代码中,我们使用了一个数组 fib 来存储计算过程中的斐波那契数列。我们首先将 fib 数组的前两项初始化为 0 和 1,然后使用一个循环来计算从第三项开始的所有斐波那契数列。最后返回 fib[n] 即可得到第 n 项斐波那契数列的值。
function fibonacci(n) {
  const fib = [0, 1];
  for (let i = 2; i <= n; i++) {
    fib[i] = fib[i - 1] + fib[i - 2];
  }
  return fib[n];
}

console.log(fibonacci(10)); // 输出 55

每次回答结果不一样,这是第二次结果

function fibonacci(n) {
  if (n < 1) {
    return 0;
  }
  if (n === 1 || n === 2) {
    return 1;
  }
  let prev1 = 1;
  let prev2 = 1;
  let curr = 0;
  for (let i = 3; i <= n; i++) {
    curr = prev1 + prev2;
    prev2 = prev1;
    prev1 = curr;
  }
  return curr;
}
def fibonacci(n: int) -> int:
    if n < 1:
        return 0
    if n == 1 or n == 2:
        return 1
    prev1 = 1
    prev2 = 1
    curr = 0
    for i in range(3, n + 1):
        curr = prev1 + prev2
        prev2 = prev1
        prev1 = curr
    return curr

N 皇后算法

这个函数接收一个整数 n 作为参数,返回一个数组,其中包含所有可能的 N 皇后问题的解。在这个实现中,我们使用了回溯算法来递归地尝试每一行中的每一个位置,如果当前位置可以放置皇后,则继续递归下一行;如果当前位置不行,则回溯到上一行重新尝试。在判断当前位置是否可以放置皇后时,我们检查当前列、当前左对角线和当前右对角线是否已经有皇后,如果没有,则可以放置。时间复杂度为 O(n!)。

function solveNQueens(n) {
  const result = [];
  const board = Array.from({ length: n }, () => Array.from({ length: n }, () => '.'));

  function backtrack(row) {
    if (row === n) {
      result.push(board.map(row => row.join('')));
      return;
    }
    for (let col = 0; col < n; col++) {
      if (isValid(row, col)) {
        board[row][col] = 'Q';
        backtrack(row + 1);
        board[row][col] = '.';
      }
    }
  }

  function isValid(row, col) {
    for (let i = 0; i < row; i++) {
      if (board[i][col] === 'Q') {
        return false;
      }
    }
    for (let i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
      if (board[i][j] === 'Q') {
        return false;
      }
    }
    for (let i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++) {
      if (board[i][j] === 'Q') {
        return false;
      }
    }
    return true;
  }

  backtrack(0);
  return result;
}

Last update: November 9, 2024