使用递归函数对整数进行随机排序

时间:2018-07-09 21:08:52

标签: python python-3.x

一个递归函数,它接受一个整数并将其改组。依次从前一个数字和后面的一个数字开始,然后从前面的第二个数字和后面的第二个数字进行排序,依此类推,直到重新排列的数字与原始数字相同。

例如,将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

5 个答案:

答案 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());
}