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次迭代,这意味着我们使用了nn的时间。因此,给定函数的时间复杂度为O(NN)。
在check函数中,每次我们都会创建给定数字的副本,这意味着我们使用了额外的N空间。因此,给定函数的空间复杂度为O(N)。
总体思路
在上面的代码中,如果所有数字都不相同,则可以在O(N)的时间复杂度和O(1)的空间复杂度内得到答案,因为如果任何一个数字小于第一个数字,那么在进行一次旋转后,该数字将小于初始数字。
结论
在本教程中,我们通过一个JavaScript程序来检查给定数字的所有旋转是否大于或等于给定数字。程序的时间复杂度是O(N*N),空间复杂度是O(N),其中N是给定数字的大小。我们实现了一个程序,找到给定数字的每个旋转并与原始数字进行比较。