JavaScript程式:檢查陣列元素能否透過旋轉數字轉換為普洛尼克數


普洛尼克數也稱為矩形數,它是兩個連續整數乘積的數。我們將得到一個整數陣列,我們可以旋轉數字任意次數以獲得所有組合。如果透過旋轉數字產生的任何組合都能將每個陣列元素轉換為普洛尼克數,則輸出true,否則輸出false。

普洛尼克數

首先,讓我們討論普洛尼克數:普洛尼克數是兩個連續整數的乘積。

數學上來說,如果我們有整數x,其下一個連續整數為x+1,並且數k是它們的乘積,這意味著:k = (x)*(x+1)。一些普洛尼克數的例子是

  • 0是0和1的乘積。

  • 2是1和2的乘積。(原文有誤,應為2)

  • 6是2和3的乘積。

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

示例

假設我們得到一個數組:

{ 21, 65, 227, 204, 2}

輸出:Yes

解釋

對於第零個索引:21,旋轉一次後可以轉換為12,它是3和4的乘積,因此是普洛尼克數。

對於第一個索引:65,旋轉一次後可以轉換為56,它是7和8的乘積,因此是普洛尼克數。

對於第二個索引:227,旋轉一次後可以轉換為272,這是一個普洛尼克數。

類似地,204可以轉換為420,而2本身就是一個普洛尼克數。

方法

我們已經看到了程式碼示例,現在讓我們來看步驟:

  • 首先,我們將定義一個函式來旋轉給定的數字。整數將作為引數傳遞,並將轉換為字串。

  • 使用substring方法,我們將字串向右旋轉,然後將其轉換回數字並返回。

  • 我們將定義一個pronic函式來檢查當前數字是否是普洛尼克數。

  • 我們將找到當前數字平方根的floor值,並將其與連續數字相乘,以確定當前數字是否是普洛尼克數。

  • 我們將定義一個函式,透過將數字轉換為字串來查詢當前數字的位數。

  • 在主函式中,我們將遍歷陣列,對於每個元素,我們將旋轉其長度的次數,或者直到找到普洛尼克數。

  • 如果在所有迭代後我們找到任何不是普洛尼克數並且無法將其轉換為普洛尼克數的數字,我們將輸出no,否則輸出yes。

示例

在下面的示例中,我們檢查是否可以透過旋轉數字將陣列的所有元素轉換為普洛尼克數。輸入和預期輸出如下所示。

輸入:Array = [21, 65, 227, 204, 2]

預期輸出:Yes

// 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程式,用於查詢是否可以透過向左或向右旋轉數字來將陣列的每個元素轉換為普洛尼克數。我們定義了某些函式來旋轉數字、檢查它們是否是普洛尼克數以及獲取數字的位數。上述程式碼的時間複雜度為O(N),空間複雜度為O(1)。

更新於:2023年4月13日

63 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.