Lettcode刷题笔记(三)

9. 回文数

示例 1:

输入: 121
输出: true
示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

 

思路:这道题有两种解法。1.转换为字符串,然后判断前后字符串是否相等。2.利用算法让数字变量反转。

我的解法是第一种:

class Solution {
    public boolean isPalindrome(int x) {

       Integer a=new Integer(x);
       String  b=a.toString();
       int n=b.length();
       boolean re=true;
       for(int i=0;i<b.length();i++){
          //截取字符串进行判断
          if(b.substring(i,i+1).equals(b.substring(n-i-1,n-i))){
             
          }else{
             re=false;
          } 
       }
      return re;
    }
}

 

2.其他大佬的解法

class Solution {
    public boolean isPalindrome(int x) {
        //如果x为负数或个位数为0的数一定不是回文数
        if(x<0||(x>0&&x%10==0)){
            return false;
        }
        int reverseNum=0;
        //当x小于或等于reverseNum时,反转完成
        while (x>reverseNum){
            reverseNum=reverseNum*10+x%10;
            x/=10;
        }

        //reverseNum%10==x考虑的是奇数的情况,reverseNum取多了一位,需要去掉再比较
        return reverseNum==x||reverseNum/10==x;
    }
}

 

453. 最小移动次数使数组元素相等

给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数。每次移动将会使 n - 1 个元素增加 1。

 示例:

输入:
[1,2,3]

输出:
3

解释:
只需要3次移动(注意每次移动会增加两个元素的值):

[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]

 

 

思路:这道题我没有做出来。看了大佬的方法才做来的     

每次使n-1个元素+1 完全等效于 每次使1个元素-1然后所有元素+1
所以只需找出:每次让1个元素-1,多少次后所有元素相等

 来自 题解:《一丝灵感的方法》  作者:candy-12

class Solution {
    public int minMoves(int[] nums) {
        Arrays.sort(nums);
        int s = 0;
        for (int i = 0; i < nums.length; i++) {
            s += nums[i] - nums[0];
        }
        return s;
    }
}

作者:candy-12
链接:https://leetcode-cn.com/problems/minimum-moves-to-equal-array-elements/solution/yi-si-ling-gan-de-fang-fa-by-candy-12/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

posted @ 2020-10-21 10:22  leon-tzc  阅读(107)  评论(0)    收藏  举报