每日一题_36. 有效的数独

每日一题_36. 有效的数独

leetcode_36

题目:
在这里插入图片描述
题意分析:
这一题是一个常规题吧,就是让我们判断一个数独题目是不是正确的,但是注意这不是让我们判断数独本省有没有解,只是让我们判断这个数独题目本身满不满足数独的条件。

这道题没什么太多的算法,就是有两个技巧吧,一个是记录每行每列九宫格里字符出现的个数,因为范围固定在字符1-9,因此可以用一个int数组来当作hash表,键值就是ch(char) - ‘0’。

另一个处理的就是遍历九宫格了,官方答案给的是一次遍历,但是我一开始想的就是分开遍历,在遍历九宫格,有思考一会儿。官答是直接开了一个三维数组([3][3][9])来记录每行每列的九宫格,我思维比较直接就用一个一维数组,单独遍历每个九宫格进行检验,遍历的时候找到每个小九宫的起点,也就是(0,0),(0,3),(0,6)… … 找到起点之后,每个九宫格有九个数,遍历然后在起点的基础上加上偏移就行了(k / 3, k % 3)。

代码:

class Solution {
public:

    bool isValidSudoku(vector<vector<char>>& board) {
        int a[10];
        for (int i = 0; i < 9; i ++)
        {
            memset(a, 0, sizeof a);
            for (int j = 0; j < 9; j ++)
                if ((board[i][j] != '.') && ++ a[board[i][j] - '0'] > 1) return false;
        }

        for (int i = 0; i < 9; i ++)
        {
            memset(a, 0, sizeof a);
            for (int j = 0; j < 9; j ++)
                if ((board[j][i] != '.') && (++ a[board[j][i] - '0'] > 1)) return false;
        }

        for (int i = 0; i < 9; i += 3)
            for (int j = 0; j < 9; j += 3)
            {
                memset(a, 0, sizeof a);
                for (int k = 0; k < 9; k ++)
                {
                    int row = i + k / 3, col = j + k % 3;
                    if (board[row][col] != '.' && ++ a[board[row][col] - '0'] > 1) return false;
                }
            }

        return true;

    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
import pandas as pd import datetime import tkinter as tk # 获取当前日期,格式为年月日 now = datetime.datetime.now().strftime('%Y%m%d') # 读取Excel文件 data = pd.read_excel(r'E:\每日数据\智能POS明细.xlsx',dtype={'商户编号':str,'终端编号':str}) # 获取省份列表 department_list = data['省份'].unique() # 事件处理程序,按省份提取数据 def extract_by_department(): # 用户输入省份名称 department_name = department_entry.get() # 按照省份拆分数据 if department_name in department_list: new_df = data[data['省份'] == department_name ] file_name = department_name + '智能POS明细' + now + '.xlsx' new_df.to_excel(file_name, index=False) result_label.config(text="数据提取成功!") else: result_label.config(text="闲的没事干了,就去给靓坤一大逼斗,请重选择!!!") # 事件处理程序,全部提取数据 def extract_all(): # 循环按照省份拆分数据 for department in department_list: new_df = data[data['省份'] == department] file_name = department + '智能POS明细' + now + '.xlsx' new_df.to_excel(file_name, index=False) result_label.config(text="数据提取成功!") # 创建窗口 window = tk.Tk() window.title("智能POS明细数据提取") window.geometry("400x200") # 创建控件 department_label = tk.Label(window, text="省份名称:") department_entry = tk.Entry(window) extract_by_department_button = tk.Button(window, text="按省提取", command=extract_by_department) extract_all_button = tk.Button(window, text="全部提取", command=extract_all) result_label = tk.Label(window, text="") # 显示控件 department_label.pack() department_entry.pack() extract_by_department_button.pack() extract_all_button.pack() result_label.pack() # 运行窗口 window.mainloop()
06-12

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值