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位的字符串之后添加当前数字,得到了第一次旋转。
上述方法用于顺时针旋转数字,而逆时针旋转则需要从前面取数字并将其添加到最后。
如果没有指定旋转方向,我们将采用顺时针方向。因此,在示例中,我们将看到顺时针旋转。
Learn JavaScript in-depth with real-world projects through our JavaScript certification course. Enroll and become a certified expert to boost your career.
方法
这种方法是蛮力法,在这种方法中,我们将找到给定数字的每一次旋转,并检查每个数字是否大于给定数字。如果我们找到任何小于当前数字的数字,我们将返回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是给定数字的大小。我们实现了一个程序,在这个程序中,我们找到了给定数字的每一次旋转,并将其与原始数字进行了比较。