一个递归函数,它接受一个整数并将其改组。依次从前一个数字和后面的一个数字开始,然后从前面的第二个数字和后面的第二个数字进行排序,依此类推,直到重新排列的数字与原始数字相同。
例如,将123456打印为162534,或将130打印为103。我们将不胜感激。
在字符串上很容易,需要整数的建议。
A = '130'
def shuffle(A):
if len(A) <= 2:
return A
return (A[0] + A[-1]) + shuffle(A[1:-1])
输出:103
答案 0 :(得分:5)
将其转换为字符串?
A = 130
def shuffle(A):
A = str(A)
if len(A) <= 2:
return int(A)
return int((A[0] + A[-1]) + str(shuffle(A[1:-1])))
答案 1 :(得分:2)
不转换为字符串:
def shuffle(x):
if x < 100:
return x
t = x
l = 0
while t > 0:
t //= 10
l += 1
a = x // 10 ** (l-1) * 10 ** (l-1)
b = (x % 10) * 10 ** (l-2)
return a + b + shuffle((x - a) // 10)
测试工作正常
>>> shuffle(123456)
162534
>>> shuffle(310)
301
答案 2 :(得分:0)
C#
public static int testfun(int A)
{
string output = "";
if (A >= 0 && A <= 100000000)
{
string input = A.ToString();
var numchars = input.ToCharArray();
for (int i = 0; i < numchars.Length; i++)
{
if (i % 2 == 0)
{
output += numchars[i/2];
}
else
{
output += numchars[numchars.Length - (i/2+1)];
}
}
}
return Convert.ToInt32(output);
}
答案 3 :(得分:0)
迭代string
并使用带有正负索引的slices
def shuffle(phrase):
even = 0
odd = -1
result = ''
phrase = str(phrase)
for n in range(len(phrase)):
if int(n/2) == n/2:
result = result + phrase[even]
even += 1
else:
result = result + phrase[odd]
odd += -1
return result
答案 4 :(得分:-1)
面向学生的Java解决方案
int shuffle(int num) {
String str = String.valueOf(num);
if (str.length() <= 1) {
return num;
}
char[] firstHalf = str.substring(0,str.length()/2).toCharArray();
char[] secondHalf = new StringBuilder(str.substring(str.length()/2)).reverse().toString().toCharArray();
StringBuilder finalStr = new StringBuilder();
for (int i=0;i<firstHalf.length;i++) {
finalStr.append(firstHalf[i]);
finalStr.append(secondHalf[i]);
}
// To handle for odd numbers length of array
if (secondHalf.length > firstHalf.length) {
finalStr.append(secondHalf[secondHalf.length - 1]);
}
return Integer.parseInt(finalStr.toString());
}