JavaScript 检查所有数组元素是否可以通过旋转数字转换为矩形数

JavaScript 检查所有数组元素是否可以通过旋转数字转换为矩形数

矩形数也称为长方形数,矩形数是两个连续数的乘积。我们将得到一个整数数组,并可以在任何方向上旋转数字以获得所有组合。对于通过旋转数字产生的任何组合,如果每个数组元素都可以转换为矩形数,则打印true,否则打印false。

矩形数

首先,让我们讨论矩形数:矩形数是两个连续数的乘积。

在数学上说,如果我们有整数x,它的下一个连续数将是x+1,并且令数字k是它们两个的乘积,那就是:k = (x)*(x+1)。一些矩形数的示例是:

  • 0是0和1的乘积。

  • 1是1和2的乘积。

  • 6是2和3的乘积。

-> 12、20、30、42、56、72、90、110、132、156、182、210、240、272等。

示例

假设我们有一个数组:

{ 21, 65, 227, 204, 2}

输出:是

解释:

对于第0个索引:21,经过一次旋转可以转换为12,这是3和4的乘积,因此是矩形数。

对于第1个索引:65,经过一次旋转可以转换为56,这是7和8的乘积,因此是矩形数。

对于第2个索引:227,经过一次旋转可以转换为272,这是一个矩形数。

类似地,204变为420,2本身是一个矩形数。

方法

我们已经看到了代码的示例,现在让我们移动到步骤−

  • 首先,我们将定义一个函数来旋转给定的数字。一个整数将作为参数传递,并转换为字符串。

  • 使用substring方法,我们将字符串向右旋转,然后再转换回数字并返回。

  • 我们将定义一个函数来检查当前数字是否是“pronic”。

  • 我们将找到当前数字的平方根的下取整,并将其乘以它的下一个数字,以判断当前数字是否是“pronic”。

  • 我们将定义一个函数来找出当前数字中的位数,将其转换为字符串。

  • 在主函数中,我们将遍历数组,并且对于每个元素,我们将旋转它的长度次数,直到找到“pronic”数字或达到最长次数。

  • 如果在所有迭代之后找到任何数字都不是“pronic”,而我们无法将其转换为“pronic”数字,则打印no,否则打印yes。

示例

在下面的示例中,我们检查是否可以通过旋转数字将所有数组元素转换为“pronic”数字。输入和预期输出如下所示。

输入:数组 = [21, 65, 227, 204, 2]

预期输出:是

// function to rotate the digits
function rotate(num){

   // converting integer to string
   var str = num.toString();

   // putting first index value to last
   str = str.substring(1) + str.substring(0,1);

   // converting back string to integer
   num = parseInt(str);
   return num;
}

// function to check whether current number if pronic number or not
function isPronic(num){

   // getting square root of the current number
   var cur = Math.sqrt(num);

   // taking floor of cur
   cur = Math.floor(cur);
   if(cur*(cur+1) == num) {
      return true;
   }
   else {
      return false;
   }
}

// function to find the length of the current integer
function number_length(num){
   var str = num.toString()
   var len = str.length;
   return len;
}

// function to check whether array is pronic or not
function check(arr){
   var len = arr.length;
   for(var i =0; i<len; i++){
      // getting length of the current number
      var cur = number_length(arr[i]);
      while(cur--){
         if(isPronic(arr[i])){
            break;
         }
         arr[i] = rotate(arr[i]);
      }
      if(isPronic(arr[i]) == false){
         return false;
      }
   }
   return true;
}
var arr = [21, 65, 227, 204, 2]
console.log("Array:", JSON.stringify(arr))
if(check(arr)){
   console.log("The elements of array can be converted to pronic numbers.");
}
else{
   console.log("The elements of array can't be converted to pronic numbers.");
}

输出

Array: [21,65,227,204,2]
The elements of array can be converted to pronic numbers.

时间和空间复杂度

上述代码的时间复杂度是O(N),其中N是数组的大小。在遍历数组和获取其平方根时,我们都会额外加上数字大小的对数因子,但由于给定整数的最大长度非常小,对线性时间复杂度没有影响。

上述代码的空间复杂度是常数或O(1),因为我们这里没有使用任何额外的空间。

结论

在本教程中,我们实现了一个JavaScript程序,通过旋转数字的位数,来判断是否能将数组的每个元素转换为pronic数。我们定义了一些函数来旋转数字、检查它们是否为pronic数以及获取数字的位数。上述代码的时间复杂度是O(N),空间复杂度是O(1)。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程