IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 美团笔试:判断一个数的全排列是否能被22整除(动态规划) -> 正文阅读

[数据结构与算法]美团笔试:判断一个数的全排列是否能被22整除(动态规划)

整除
时间限制: 5000MS
内存限制: 655360KB
题目描述:
小美最近迷上了22这个数字,一天,她发现他的一本书中有一个神秘的大数字。于是她想知道这个数字中有多少子串代表的数字能被22整除。

输入描述
一行一个只由数字组成的不含前导零的字符串,字符串长度为 n(1≤n≤105)。

输出描述
一行一个整数代表有多少这个字符串的子串代表的数字能被 22 整除。

样例输入
12221
样例输出
2

提示
样例解释

[2,3] [3,4] 代表的子串为22,可以被22整除。

// 判断一个str的全排列,有多少能被22整除
    /*
    动态规划
    dp[i][j]:代表str的[i,j]的长度是否能被22整除
    初始化:dp[0][1]=false,dp[1][2]=false等等
    动态转移方程:
    dp[i][j]是否能被22整除
        dp[i][j-1]等于true
            dp[i][j]=false&&yuShu[i][j] = [j-1,j]
        dp[i][j-1]等于false
            判断yuShu[j][j-1]是否>22
                大于:dp[i][j]=false&&后面都不需要判断,都是false
                小于:dp[j][j]=(yuShu[i][j-1]*10+dp[j-1][j])%22 是否等于0
     */
    public static int ZhengChu(String str) {
        int res = 0;
        // dp[i][j]代表字符串[i,j)是否能被22整除
        boolean[][] dp = new boolean[str.length()][str.length() + 1];
        // yuShu[i][j]代表字符串[i,j)被22整除,剩余的余数
        int[][] yuShu = new int[str.length()][str.length() + 1];
        for (int i = 0; i < str.length(); i++) {
            for (int j = i + 1; j <= str.length(); j++) {
                // 代表的[j-1,j]这个数字
                int val = Integer.parseInt(str.substring(j - 1, j));
                // 初始化
                if (j == i + 1) {
                    dp[i][j] = false;
                    yuShu[i][j] = val;
                }
                if (dp[i][j - 1]) {
                    dp[i][j] = false;
                    yuShu[i][j] = val;
                } else {
                    if (yuShu[i][j - 1] > 22) {
                        dp[i][j] = false;
                        break;
                    } else {
                        int yu = (yuShu[i][j - 1] * 10 + val) % 22;
                        if (yu==0){
                            dp[i][j] = true;
                            System.out.println(str.substring(i,j));
                            res++;
                        }
                        yuShu[i][j] = yu;
                    }
                }
            }
        }
        return res;
    }
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-13 09:31:11  更:2021-09-13 09:31:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 14:37:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码