每日一题

每日一题

力扣 每日一题

738

/*
如1231322
该数最小不会小于999999
最大不会超过1231322
(但时间复杂度过高)

先处理判断该数是否为单调递增的函数
本题方法应该是
1
12
123
1231(x)
1229
12299
122999
1229999

1221322

1
12
122
1221(x)
121(x)
119
1199
11999
119999
1199999
步骤一:
拆分出从头开始最长的单调递增数
直到不是单增数为止
步骤二
当前最右边的数-1
判断此时是否为单调递增数
若是,则步骤三
否,则抛弃最右边的数
对新数字字符串执行步骤二
步骤三:
添加字符’9’到该数字字符串长度与原数字字符串相同为止
此时
*/

class Solution {
    static boolean judge(String N){
        for(int i = 0; i < N.length() - 1; i++)
            if(Integer.parseInt("" + N.charAt(i)) > Integer.parseInt("" + N.charAt(i + 1)))
                return false;
        return true;
    }

    public static int monotoneIncreasingDigits(int N) {
        String number = "" + N, temp = "";
        for(int i = 0; i < number.length(); i++){
            temp += number.charAt(i);
            if(!judge(temp)){
                temp = temp.substring(0, temp.length() - 1);
                break;
            }
        }
        if(temp.equals(number))return Integer.parseInt(temp);
        while(true){
            temp = temp.substring(0, temp.length() - 1) + (Integer.parseInt("" + temp.charAt(temp.length() - 1)) - 1);
            if(judge(temp))break;
            temp = temp.substring(0, temp.length() - 1);
        }
        while(temp.length() != number.length())temp += "9";
        return Integer.parseInt(temp);
    }

    public static void main(String[] args) {
        int N = 1234;
        System.out.println(monotoneIncreasingDigits(N));
    }
}

290.单词规律

本题本应用哈希映射解决,但由于对哈希表不是特别熟悉故没有使用,而是采用了自己建立的映射。

import java.util.Vector;

class Solution {
    public static boolean wordPattern(String pattern, String s) {
        String pa[] = s.split(" ");
        boolean [] len = new boolean[pa.length];
        Vector<String> judge = new Vector<String>();
        if(pattern.length() != pa.length)return false;
        //识别pattern中哪些位置相同,并比较s中该位置是否相同
        for(int i = 0; i < pattern.length(); i++){
            if(len[i])continue;
            char temp = pattern.charAt(i);
            if(judge.indexOf(pa[i]) != -1)return false;
            judge.add(pa[i]);
            Vector<Integer> local = new Vector<Integer>();
            for(int j = i; j < pattern.length(); j++){    
                if(len[j])continue;
                if(temp == pattern.charAt(j)){
                    len[j] = true;
                    local.add(j);
                }     
            }
            for(int j : local){
                if(!pa[j].equals(pa[local.get(0)]))return false;
            }
            local = null;
        }
        return true;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值