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是給定數字的大小。我們實現了一個程式,在這個程式中,我們找到了給定數字的每一次旋轉,並將其與原始數字進行了比較。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP