JavaScript程式:檢查給定數字的所有旋轉是否都大於或等於給定數字


在本文中,我們將學習一個JavaScript程式,用於檢查給定數字的所有旋轉是否都大於或等於給定數字。我們將編寫一個演算法並解釋每一步的操作。我們將討論的程式碼的時間複雜度將被最佳化,空間複雜度也將得到改進。

問題介紹

在這個問題中,我們得到一個數字,並且必須檢查每個旋轉是否都大於當前數字,或者簡單地說,如果存在小於當前數字的旋轉,則返回false,否則返回true。

給定數字的旋轉

示例

給定數字的旋轉可以分為兩種型別:順時針或逆時針。在順時針旋轉中,我們取數字的最後一位,並將其新增到第一位之前。例如:

var number = 1234 
var last_digit = number%10;
number /= 10;
number = Math.floor(number)
var answer = last_digit.toString() + number.toString();
console.log("The first rotation of the given number is: " + answer)

在上面的程式碼中,我們給定一個數字,並且必須找到給定數字的第一次旋轉。首先,我們將當前數字的最後一位儲存在另一個變數中,然後透過將其除以10並取整來刪除給定數字的最後一位。

最後,我們在最後一位之後添加當前數字,得到了第一次旋轉。

示例

為了獲得下一次旋轉或當前數字的第二次旋轉,我們可以獲得第一次旋轉的下一次旋轉,或者我們可以透過另一種適用於任何旋轉的方法來實現,讓我們透過程式碼來看一下:

var number = 1234 
var i = 2
var n_string = number.toString()
var last_i_elements = n_string.substring(n_string.length-i);
var answer = last_i_elements+ n_string.substring(0,n_string.length-i);
console.log("The ith rotation of the given number is: " + answer)

在上面的程式碼中,我們給定一個數字,並且必須找到給定數字的第i次旋轉。首先,我們將當前數字的最後i位儲存在另一個變數中。

最後,我們在包含最後i位的字串之後添加當前數字,得到了第一次旋轉。

上述方法用於順時針旋轉數字,而逆時針旋轉則需要從前面取數字並將其新增到最後。

如果沒有指定旋轉方向,我們將採用順時針方向。因此,在示例中,我們將看到順時針旋轉。

方法

這種方法是蠻力法,在這種方法中,我們將找到給定數字的每一次旋轉,並檢查每個數字是否大於給定數字。如果我們找到任何小於當前數字的數字,我們將返回false,否則返回true。

示例

首先,讓我們看看程式碼,然後我們將解釋程式碼:

function check(number,i){
   var n_string = number.toString()
   var last_i_elements = n_string.substring(n_string.length-i);
   var answer = last_i_elements+ n_string.substring(0,n_string.length-i);
   if(answer < n_string){
      return false;
   }
   return true;
}

var number = 12345
// checking for every rotation
var ans = true;
for(var i=1;i<number.toString().length;i++){
   ans = check(number,i);
   if(ans == false){
      break;
   }
}
if(ans == true){
   console.log("There is no rotation present which is less then given number")
}
else{
   console.log("There is a rotation of given number present which is less then given number")
}

在上面的程式中,我們首先使用for迴圈從1迭代到數字大小減1,以獲得從1到大小減1的每次旋轉。在每次迭代中,我們呼叫一個預定義的函式。

在函式中,我們將獲得作為引數傳遞給函式的第i次旋轉,並將其與給定數字進行比較。如果第i次旋轉小於給定數字,我們將返回false作為返回值,否則返回true。

我們維護了一個名為answer的變數,它將儲存函式返回的true和false值,並將根據要求列印答案。

時間和空間複雜度

在上面的程式碼中,我們總共呼叫了check()函式n次,其中n是給定數字的大小。在函式內部,我們建立了一個給定數字的副本子字串,並進行了n次迭代,這意味著我們使用了n*n的時間。因此,給定函式的時間複雜度為O(N*N)。

在check函式中,每次我們都會建立一個給定數字的副本,這意味著我們使用了額外的N空間。因此,給定函式的空間複雜度為O(N)。

總體思路

在上面的程式碼中,如果所有數字都是不同的,那麼我們可以在O(N)的時間複雜度和O(1)的空間複雜度內得到答案,因為如果任何數字小於第一位數字,這意味著在恰好一次旋轉中,數字將小於初始數字。

結論

在本教程中,我們學習了一個JavaScript程式,用於檢查給定數字的所有旋轉是否都大於或等於給定數字。程式的時間複雜度為O(N*N),空間複雜度為O(N),其中N是給定數字的大小。我們實現了一個程式,在這個程式中,我們找到了給定數字的每一次旋轉,並將其與原始數字進行了比較。

更新於:2023年3月24日

瀏覽量:100

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.