• 力扣题目汇总(旋转数字,移除元素,找不同)


    旋转数字

    1.题目描述

    1. 我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后,我们仍可以得到一个有效的,且和 X 不同的数。要求每位数字都要被旋转。

      如果一个数的每位数字被旋转以后仍然还是一个数字, 则这个数是有效的。0, 1, 和 8 被旋转后仍然是它们自己;2 和 5 可以互相旋转成对方;6 和 9 同理,除了这些以外其他的数字旋转以后都不再是有效的数字。

      现在我们有一个正整数 N, 计算从 1N 中有多少个数 X 是好数?

      示例:
      输入: 10
      输出: 4
      解释: 
      在[1, 10]中有四个好数: 2, 5, 6, 9。
      注意 1 和 10 不是好数, 因为他们在旋转之后不变。
      

      注意:

      • N 的取值范围是 [1, 10000]
    2. 2.解题思路

        # 1.if 数字中含有 3 4 7--不满足条件
        # 2. elif数字全部由 0 1 8 构成--不满足条件 
        # 3. else:数字中含有2, 5, 6, 9--满足条件
        
        #数字不含{3,4,7}含{2,5,6,9}
                    
    

    3.解题

    class Solution:
        def rotatedDigits(self, N: int) -> int:
            cnt = 0
            a = {'3','4','7'}
            b = {'0','1','8'}
            c = {'2', '5', '6','9'}
            for num in range(1,N+1):
                if all(x not in a for x in str(num)) and not all(x in b for x in str(num)):
                    cnt +=1
            return(cnt)  
        # 1.if 数字中含有 3 4 7--不满足条件
        # 2. elif数字全部由 0 1 8 构成--不满足条件 
        # 3. else:数字中含有2, 5, 6, 9--满足条件
        
        #数字不含{3,4,7}含{2,5,6,9}
                    
            
    

    移除元素

    1.题目描述

    给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。

    不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

    元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

    示例 1:

    给定 nums = [3,2,2,3], val = 3,
    
    函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。
    
    你不需要考虑数组中超出新长度后面的元素。
    

    示例 2:

    给定 nums = [0,1,2,2,3,0,4,2], val = 2,
    
    函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。
    
    注意这五个元素可为任意顺序。
    
    你不需要考虑数组中超出新长度后面的元素。
    

    说明:

    为什么返回数值是整数,但输出的答案是数组呢?

    请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

    你可以想象内部操作如下:

    // nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝
    int len = removeElement(nums, val);
    
    // 在函数里修改输入数组对于调用者是可见的。
    // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
    for (int i = 0; i < len; i++) {
        print(nums[i]);
    }
    

    2.解题思路

    #难点在原来函数上修改
    #首先记录所有val对应的索引
    #然后一一删除
    

    3.解题

    class Solution:
        def removeElement(self, nums: List[int], val: int) -> int:
            nums_del_list = list()
            cont = 0
            for a in range(len(nums)):
                if nums[a]==val:
                    nums_del_list.append(a)
            for b in nums_del_list:
                del nums[b+cont]
                cont -= 1
            
    
                
            
    

    找不同

    1题目描述

    给定两个字符串 st,它们只包含小写字母。

    字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。

    请找出在 t 中被添加的字母。

    示例:

    输入:
    s = "abcd"
    t = "abcde"
    
    输出:
    e
    
    解释:
    'e' 是那个被添加的字母。
    

    2.解题思路

    #有两种情况
    #第一种添加的字母原来字母中没有,这个可以用FOR然后判断有无进行
    #第二种添加的字母原来字母中有,用计数来判断
    #为了减少运行时间我们要引入SET的去重
    

    3.解题

    class Solution:
        def findTheDifference(self, s: str, t: str) -> str:
            if len(set(t))==len(set(s)):
                for a in set(t):
                    print(s.count(a))
                    print(t.count(a))
                    if s.count(a) != t.count(a):
                        return a
                        break
            else:
                for a in t:
                    if a not in s:
                        return a
                        break
        
    

    ```有更加好的思路,或者解题方法评论区留言谢谢``

  • 相关阅读:
    Captura
    食用Win系统自带的PowerShell登录服务器
    uTools
    图片镜像缓存服务
    博客园自定义网站ico
    超星图床
    教程翻译-理解基于矢量场寻路算法
    CentOS防火墙命令
    CentOS7的vsftpd安装和配置
    Unity网路编程-TCP实现细节备忘
  • 原文地址:https://www.cnblogs.com/pythonywy/p/10932640.html
Copyright © 2020-2023  润新知