首页 > 试题广场 >

神奇的数字

[编程题]神奇的数字
  • 热度指数:7257 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
将字符串数字中为偶数位的数字进行翻转,将翻转后的结果进行输出。
示例1

输入

"1234"

输出

"1432"

说明

第2、4位为偶数,所以将其翻转后,得到 1432
示例2

输入

"12346"

输出

"16342"

说明

第2、4、5位为偶数,所以将其翻转后,得到 16342

备注:
数字的长度<=10^7 且不包含数字0    
双指针解法 可以类比 快排 partition过程,将判断条件中的基准值换成是否为偶数。
class Solution:
    def change(self , number ):
        # write code here
        if len(number)==0:
            return number
        
        i=0
        j=len(number)-1
        lst = list(map(int, number))

        while(i<j):
            if(j<0&nbs***bsp;i> len(lst)):
                break
            while i<j and lst[i]%2 != 0 and i < len(lst):
                i+=1
            while i<j and lst[j]%2 != 0 and j > 0:
                j-=1
            
            lst[i],lst[j] =lst[j],lst[i]
            i+=1
            j-=1
            
        string = ""
        for i in lst:
            string = string+str(i)
            
        return string


发表于 2020-07-31 20:39:23 回复(0)
参考上面的思想,遍历字符串,如果该位为偶数,把它append到一个列表里,然后将该位赋值为‘0’,列表翻转,第二次遍历,偶数位用已翻转的列表分别一一带进去
class Solution:
    def change(self , number ):
        sta = []
        j = 0
        nums = list(map(int, number))
        for i in range(len(nums)):
            if nums[i]%2 == 0:
                sta.append(nums[i])
                nums[i]='0'
        sta.reverse()
        for i in range(len(nums)):
            if nums[i] == '0':
                nums[i] = sta[j]
                j = j + 1
        return ''.join(map(str,nums))


编辑于 2020-04-13 22:45:41 回复(0)

问题信息

难度:
3条回答 6564浏览

热门推荐

通过挑战的用户

查看代码