Digit Counts 算法

本文介绍了一种名为DigitCounts的算法,用于统计从0到n的整数范围内,数字k出现的次数,通过循环遍历和条件判断实现。

Digit Counts 算法

Count the number of k between 0 and n. k can be 0 - 9.

public class Solution {
    /**
     * @param k: An integer
     * @param n: An integer
     * @return: An integer denote the count of digit k in 1..n
     */
    public int digitCounts(int k, int n) {
        // write your code here
        int count = 0 ;
       // int[] c = new int[n] ;
        //for (int i = 0 ; i <= n ; i++ ){
              //c[i] = i ;
       // }
        int c = 0 ; 

        for( int i = 0 ; i <= n ; i++){
            c = i ;
            if (c == k){
                count++ ;
            }else {
                while(c >= 10){
                    if (k == c%10 && c/10 != 0 ){
                        count++ ;
                       
                    }
                    if( k==c/10 && c/10 != 0){
                        count++ ;
                    }
                     c = c/10 ;
                }     
                
                
            } 
            
        } 
            
        return count ;

    }
}
在 MATLAB 中实现 K 近邻(KNN)算法可以通过内置函数和自定义代码相结合的方式完成。KNN 是一种简单但有效的分类算法,其核心思想是根据训练数据集中与测试样本最接近的 K 个邻居的类别,对测试样本进行分类。 ### 数据准备 通常,KNN 用于分类任务,例如手写数字识别。可以使用 MATLAB 自带的数据集,如 `digitdata`,或者自行准备图像数据集。数据需要被预处理为特征向量形式,例如将图像转换为灰度图并归一化像素值。 ### 使用 MATLAB 内置函数 MATLAB 提供了 `fitcknn` 函数用于训练 KNN 模型,并使用 `predict` 函数进行预测。以下是一个简单的示例: ```matlab % 加载数据 load fisheriris X = meas; % 特征 Y = species; % 标签 % 训练 KNN 模型 Mdl = fitcknn(X, Y, 'NumNeighbors', 5); % 预测新样本 newSample = [5.0 3.5 1.3 0.2]; % 示例输入 predictedLabel = predict(Mdl, newSample); disp(['预测标签为: ', char(predictedLabel)]); ``` ### 自定义实现 KNN 如果希望手动实现 KNN,可以使用 `pdist2` 函数计算欧氏距离,并找出最近的 K 个邻居。以下是一个简单的实现: ```matlab function predictedLabel = knn_predict(trainData, trainLabels, testData, k) % 计算距离 distances = pdist2(trainData, testData); % 找出最近的 K 个邻居 [~, idx] = mink(distances, k); % 获取邻居的标签 neighborLabels = trainLabels(idx); % 投票决定类别 [uniqueLabels, ~, idx] = unique(neighborLabels); counts = accumarray(idx, 1); [~, maxIdx] = max(counts); predictedLabel = uniqueLabels(maxIdx); end ``` ### 参数调整 KNN 的性能依赖于 K 值的选择和距离度量方式。通常,K 值过小容易受噪声影响,K 值过大则可能模糊类别边界。欧氏距离是最常用的距离度量方式,但在某些情况下也可以使用曼哈顿距离或闵可夫斯基距离。 ### 可视化与评估 可以使用混淆矩阵和分类报告来评估模型的性能。此外,可以绘制决策边界来可视化 KNN 的分类效果。 ```matlab % 计算准确率 accuracy = sum(predictedLabels == testLabels) / length(testLabels); disp(['准确率为: ', num2str(accuracy)]); ``` ### 手写数字识别示例 对于手写数字识别任务,可以使用 MNIST 数据集或 MATLAB 自带的手写数字图像。图像通常需要归一化处理,并转换为特征向量形式。以下是一个简单的预处理示例: ```matlab % 读取图像 img = imread('handwritten_digit.png'); % 转换为灰度图 grayImg = rgb2gray(img); % 归一化像素值 normalizedImg = im2double(grayImg); % 展平为特征向量 featureVector = normalizedImg(:)'; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值